我最近开始重构我的 Java 代码。一切都运行良好,直到后来,我注意到我的一些对象丢失了“正确的引用”,即对象变成了“按值传递”的情况,而不是“通过引用传递”。请注意,我确实明白 Java 始终是 pass-by-value通过引用传递仅通过内存地址传递来模拟(这就是我引用这两个短语的原因)。
我的问题是:两者之间有区别吗
Object o = new Object();
和
Object o = makeMeAnObjectPlease();
哪里
public Object makeMeAnObjectPlease()
{
Object c = new Object();
return c;
}
通过差异,我的意思是Object o = makeMeAnObjectPlease()
之后的o
将引用与内部创建的内存地址相同的内存地址makeMeAnObjectPlease()
?还有更多差异吗?
最佳答案
是的,它将引用同一个对象。不,没有其他差异。进一步举例:
Date d = makeMeAnObjectPlease();
System.out.println(d);
Date d2 = d;
changeMyObjectPlease(d2);
System.out.println(d);
System.out.println(d2);
Date makeMeAnObjectPlease() {
return new Date();
}
void changeMyObjectPlease(Date date) {
date.setTime(1234);
}
该代码中只有一个 Date 对象,尽管它在不同时间有不同的名称。最后,所有的名字都指向同一个对象,因此最后,当我们用两个不同的名字打印出该对象时,你会发现它们实际上在内存中表示同一个对象,该对象被 changeMyObjectPlease()
方法。运行上述代码的示例是:
Thu Jan 31 19:29:29 CST 2013
Wed Dec 31 18:00:01 CST 1969
Wed Dec 31 18:00:01 CST 1969
关于java - 对象 o = makeMeAnObjectPlease(); 之间的区别和 Object o = new Object();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14638204/