总结
-
java的基本数据类型是传值调用,对象引用类型是传引用。
-
当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参。
-
当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会改变实参对象的内容。
public static void main(String[] args) { int[] arr = {1,2,3,4}; System.out.println(arr[2]); // 输出结果 3 method_1(arr); System.out.println(arr[2]); // 输出结果 10 } public static void method_1(int[] arr) { arr[2] = 10; }
-
包装类作为函数的形参时,和其对应的基本类型作为形参效果一样,都是传递值,对于该对象本身并不会改变。
-
包装类的值都是final 不可变的,对于++b 或者b++ ,只是新创建了一个对象,然后把引用传给了原对象句柄,在函数中操作,只是形参的临时句柄改变了指向,实参的句柄还是指向原来的对象。所以实参的值不会改变。
public static void main(String[] args) {
int a = 10;
Integer b = 20;
method_1(a,b);
System.out.println(b); // 输出结果仍然是20
}
public static void method_1(int a,Integer b) {
b++;
}