【发布时间】:2018-04-10 14:57:26
【问题描述】:
我已经用多种语言(例如 python 和 js)进行了尝试,每次都得到相同的一般结果:
int[] arr = {1, 2, 3, 4, 5};
int[] other = arr;
other[4] = 2;
System.out.println("other[4]: " + other[4]);
System.out.println("arr[4]: " + arr[4]);
int x = 7;
int y = x;
y = 888;
System.out.println("x: " + x);
System.out.println("y: " + y);
为什么other 在修改后会更改arr,但正如应该的那样,y 在修改后不会更改x?
【问题讨论】:
-
“为什么数组会改变” 那你就错了——你只有 一个 数组。
-
请不要标记垃圾邮件,尤其是因为不同语言的答案可能不同。由于您的示例是 Java,因此我删除了 Python 标记。
-
int[] other = arr;不会创建第二个数组。它为您提供了第二个变量,该变量引用与第一个变量相同的数组。您对数组所做的任何更改都通过这两个变量自然可见,因为它们都指向同一个位置。 -
你在 arr 中有一个指向数组的指针,然后你将 other 设置为指向同一个数组的指针。通过任一指针访问数组将产生相同的值。
-
有点题外话,但恕我直言,唯一真正的答案是:去用 C 语言编程,直到你了解内存发生了什么。