是的,这是以前讨论过的基本混淆点,但是有很多错综复杂的信息,我希望有人可以在这里查明我的确切误解。
public class Test {
public static void change(int i) {
i = 2;
}
public static void change(int[] i) {
i[0] = 6;
}
public static void change(String i) {
i = "Bye";
}
public static void main(String[] args) {
int a = 1;
int[] b = {3,4,5};
String c = "Hello";
change(a);
change(b);
change(c);
System.out.println(a); // 1 - value unchanged
System.out.println(b[0]); // 6 - value changed
System.out.println(c); // Hello - value unchanged
}
}
a
实际上包含值1.当我们将其传递给change()
方法时,会创建一个新变量,也包含值1.因此,当我们更改i
时,a
不受影响。这很有道理。c
包含引用到内存中的数组对象。当我们将它传递给change()
方法时,会创建一个包含相同引用的新变量。因此,它们都代表相同的对象。因此,当我们更改i[0]
时,c[0]
也会发生变化。这也是有道理的。