public class example
{
public static void main(String[] args)
{
int[] MyArray = new int[10];
MyArray[1] = 5;
int[] NewArray = MyArray;
NewArray[1] = 10;
System.out.println(MyArray[1]);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么打印出系统10而不是5?
好像我们在对元素所做的任何改变NewArray,MyArray都会跟着变,为什么呢?
我复制这个模式以启动类似int,字符串变量,但它们不像上面那样,为什么?谢谢你,我是CS编程新手.
看起来我们对NewArray中的元素所做的任何更改,MyArray都会改变,为什么?
你没有改变NewArray.您正在更改NewArray引用值的数组.就像这样:
NewArray 是一个变量(非常规命名,但嘿)NewArray是参考区分变量,引用和对象真的非常重要.不要担心它不会立刻来找你 - 这是很多人第一次遇到像Java这样的语言时所经历的阶段.
的值MyArray,并NewArray都指向同一个数组,所以如果你更改了阵列通过一个变量,你仍然可以看到的变化,当你再看看阵列通过不同的变量.
我复制这个模式以启动类似int,字符串变量,但它们不像上面那样,为什么?谢谢你,我是CS编程新手.
因为int,这是一个值类型 - int变量的值是数字本身,而不是对象的引用.
因为String,我怀疑你正在改变变量的值来引用一个不同的String对象 - 不改变String对象本身的内容(你不能改变它 - 字符串在Java中是不可变的).例如:
String x = "first";
String y = x;
x = "second"; // This doesn't change the value of `y`
Run Code Online (Sandbox Code Playgroud)
我喜欢将变量视为纸张.对于值类型变量,该值只写在纸上:
int i = 10;
Run Code Online (Sandbox Code Playgroud)
就像有一张名字的纸,i价值10.
对于类和数组(它们是引用类型),纸上的值不是对象 - 它是导航到对象的一种方式.有点像把某人的家庭住址写在一张纸上.
假设您有两张纸,上面写有相同的地址.如果你把其中一个擦掉并写一个不同的地址,那么如果有人看着另一张纸然后去那个房子会发生什么事情,这并没有改变.这就像String上面的例子.
然而,数组示例更像是这样:我在两张纸上写下我的家庭地址,并将它们交给Fred和Ginger.弗雷德读取地址,访问我家,并将前门涂成红色.(他正在修改物体 - 我的房子 - 根本没有更换他的纸张.)现在,如果Ginger读到他的纸上的地址并访问我的家,他会看到一个红色的前门.