[英]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.