Java 参考变量混淆
它给出了输出Java 参考变量混淆,java,equals,Java,Equals,它给出了输出false,因为t1和t2有两个不同的对象,并且== 只检查引用。这很好,但是当我这么做的时候 class Test { String name; Test(String name){ this.name = name; } public static void main(String args[]) { Test t1 = new Test("Rakesh"); Test t2 = new Test(
false
,因为t1和t2有两个不同的对象,并且==
只检查引用。这很好,但是当我这么做的时候
class Test {
String name;
Test(String name){
this.name = name;
}
public static void main(String args[]) {
Test t1 = new Test("Rakesh");
Test t2 = new Test("Rakesh");
System.out.printLn(t1 == t2);
}
}
tl输出返回true
问题是,
t1
和t2
是类Test
的两个新对象,由new
关键字创建。那么它的引用怎么可能相等呢?当您分配t1=t2
时,两个引用引用引用同一个对象(您在Test t2=new Test(“Rakesh”);
中创建的第二个对象),因此t1==t2
变为真
赋值后,由
testt1=newtest(“Rakesh”)创建的对象
不再有对它的引用,这意味着它可以被垃圾收集。t1=t2
意味着t1
和t2
都指向同一个对象。也就是说t1
现在指向或存储t2
指向的对象的引用。因此t1
和t2
现在都指向同一个对象。因此它们的引用是相等的。当您执行t1=t2时,您将对象t2分配到对象t1中,从而使它们成为相同的对象。在使用new关键字之前,是否将它们都创建为独立对象并不重要
本质上,您正在丢弃最初在t1中创建的对象,当时您将t2指定给该对象
t1=t2;