if(linked.equals(saidObject))
将返回 true,因为这两个变量确实指向同一个对象。
在 Java 中,所有变量和字段都是对存在于内存某处的实际对象的引用。
当您将一个变量分配给另一个变量时,就像复制对象的地址,以便它们都指向内存中的同一个对象。
例如
Object a = new Object(); // this actually creates the Object in memory
Object b = a; // this copies the reference to Object from a to b
// At this point, a and b point to exactly the same object in memory. Therefore ...
a.equals(b); // returns true.
实际上a == b
也返回 true,这是比较这种情况的更好方法,因为==
比较两个变量是否指向同一个对象(它们确实如此),而equals()
通常按值比较,这在这里是不必要的。
是否b
实际上是a
(例如class Obj { Obj b; }; Obj a = new Obj(); a.b = a;
)内的字段并指向相同类型的对象并不重要,原理是相同的:a = b
意味着它们指向相同的对象,没有创建任何新内容。