gpt4 book ai didi

java - java中更新对象的问题

转载 作者:行者123 更新时间:2023-12-02 06:34:08 25 4
gpt4 key购买 nike

如果我有一个对象的实例,并且该对象内有一个保存另一个对象数据的变量。如果我更新第二个对象,该对象的副本也会更新,还是我需要同时更新该对象的所有副本。

例如:

public class Object()
{
int x = xValue;
Object linked = saidObject;
}

public class doStuff()
{
saidObject.x++;
if(linked.equals(saidObject))
return true;
}

这段代码(显然不能编译,只是填空)会返回 true 吗?

最佳答案

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表示它们指向同一个对象,没有创建任何新的对象。

关于java - java中更新对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19827319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com