Java 试图找出为什么将一个对象设置为另一个对象会更新这两个对象 示例代码 公共类测试{ 公开考试(){ runTest(); } 私有void runTest(){ //方法1 int[]A={1,2,3,4}; int[]B=新的int[A.长度]; for(int i=0;i
而言,区别在于,对于A和B,Java 试图找出为什么将一个对象设置为另一个对象会更新这两个对象 示例代码 公共类测试{ 公开考试(){ runTest(); } 私有void runTest(){ //方法1 int[]A={1,2,3,4}; int[]B=新的int[A.长度]; for(int i=0;i,java,Java,而言,区别在于,对于A和B,B是数组的副本,是与A完全分离的对象。对于C和D,D是另一个数组引用,它引用与C相同的对象D继续引用的不仅仅是“当前位置/状态”,但同一个对象,直到它被重新分配或超出范围。无论您对D引用的对象做了什么,都将通过C可见,因为它是同一个对象。您的尝试是正确的。如果您不创建新对象,您只会有一个对现有对象的引用副本。@PeterLawrey谢谢,如果你在调试器中仔细检查代码,你可以看到每个变量是如何变化的,哪些对象是相同的。 public class test {
B
是数组的副本,是与A
完全分离的对象。对于C和D,D
是另一个数组引用,它引用与C
相同的对象D
继续引用的不仅仅是“当前位置/状态”,但同一个对象,直到它被重新分配或超出范围。无论您对D
引用的对象做了什么,都将通过C
可见,因为它是同一个对象。您的尝试是正确的。如果您不创建新对象,您只会有一个对现有对象的引用副本。@PeterLawrey谢谢,如果你在调试器中仔细检查代码,你可以看到每个变量是如何变化的,哪些对象是相同的。
public class test {
public test(){
runTest();
}
private void runTest(){
//method 1
int[] A = {1,2,3,4};
int[] B = new int[A.length];
for (int i = 0; i < A.length; i++){
B[i] = A[i]+1;
}
for (int i: A){
System.out.println(" A: " + i);
}
System.out.println("----------");
for (int i: B){
System.out.println(" B: " + i);
}
System.out.println("----------");
//method 2
int[] C = {1,2,3,4};
int[] D = C;
for (int i = 0; i <D.length; i++){
D[i]++;
}
for (int i: C){
System.out.println(" C: " + i);
}
System.out.println("----------");
for (int i: D){
System.out.println(" D: " + i);
}
System.out.println("----------");
}
public static void main(String[] args){
new test();
}
}