在下面的代码中,将数组对象分配给另一个数组对象t。这两个是记忆中的不同对象吗?为什么更改一个对象会影响其他对象内容?
package test.main;
import java.util.LinkedHashSet;
import java.util.Set;
public class C1 implements I1,I2{
/**
* @param args
*/
public static void main(String[] args) {
int [][] a= {{1,2}};
int [][] t= {};
t=a;
t[0][0] = 3;
System.out.println("t "+t[0][0]);
System.out.println("a "+a[0][0]);
}
@Override
public void staticMethod() {
// TODO Auto-generated method stub
}
}
输出:
t 3
a 3
答案 0 :(得分:5)
这两个是记忆中的不同对象吗?
不,它们是两个不同的变量,它们引用了相同的数组对象。
关键在于理解引用变量与它引用的对象之间的区别。如果要创建两个完全不同的数组,则需要使用System.arraycopy(...)
。如果您还需要复制数组项,并且如果它是对象的数组,则需要复制引用,那么您需要进行深层复制。
答案 1 :(得分:0)
int [][] a= {{1,2}};
这会创建一个对象,由变量a
引用。
int [][] t= {};
这会创建另一个对象,由变量t
引用。
t=a;
现在t
以前引用的对象是"忘记",t
指向与a
相同的对象。
这就是为什么当您使用变量t
修改对象时,它与使用变量a
相同。这只是访问同一件事的两种方式。像2扇门进入同一个房间。