繁体   English   中英

在java中更新对象的问题

[英]Questions with updating objects in java

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

例如:

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

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

这段代码(不可编译显然只是填空)返回true?

通过做:

Object linked = saidObject;

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

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

if(linked.equals(saidObject))将返回true,因为两个变量确实指向同一个对象。

在Java中,所有变量和字段都是对存在于内存中的实际Object的引用。

将一个变量分配给另一个变量时,就像复制对象的地址一样,它们都指向内存中的同一个对象。

例如

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(); ab = a;和其指向同一类型的对象,其原理是相同: a = b表示它们指向同一个对象,不会创建任何新对象。

对象实例本身并且与每个其他实例不同。

也就是说,改变一个对象(通过重新分配一个字段) 某处可以在任何 地方修改它......因为它就是它的本质。 同样,改变一个不同的对象..也就是说,改变一个不同的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM