首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用java更新对象的问题

使用java更新对象的问题
EN

Stack Overflow用户
提问于 2013-11-07 03:11:47
回答 3查看 381关注 0票数 0

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

例如:

代码语言:javascript
代码运行次数:0
运行
复制
public class Object()
{
    int x = xValue;
    Object linked = saidObject;
}

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-07 03:23:46

当两个变量指向同一个对象时,if(linked.equals(saidObject))将返回true。

在Java中,所有变量和字段都是对内存中某个地方的实际对象的引用。

当您将一个变量赋值给另一个变量时,就像复制对象的地址,以便它们都指向内存中的同一个对象。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
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意味着它们指向相同的对象,没有任何新的创建。

票数 1
EN

Stack Overflow用户

发布于 2013-11-07 03:22:25

通过这样做:

代码语言:javascript
代码运行次数:0
运行
复制
Object linked = saidObject;

您不是在复制对象,只是创建另一个指向对象的指针,这意味着您有两个指向同一个对象的不同指针。

在某些情况下,复制或克隆对象可能很有用,但并不是通常的情况。

票数 1
EN

Stack Overflow用户

发布于 2013-11-07 03:14:14

对象实例本身就是对象实例,与其他每个实例都不同。

也就是说,改变一个对象(通过重新分配一个字段),在任何地方都会修改它。因为,嗯,事情就是这样的。同样,变异另一个对象..。就是改变另一个物体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19827319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档