java - 对象 o = makeMeAnObjectPlease(); 之间的区别和 Object o = new Object();

标签 java oop object new-operator assignment-operator

我最近开始重构我的 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/

相关文章:

java - 从 javascript 函数设置 java 变量的值

java - IO 问题 - 字节数组图像转换为 XHTML(FlyingSaucer)

javascript - 制作 HTML 源对象

具有缓存层的 Java 对象引用

java - 如何在java中通过递归连接字符串生成方程?

c++ - 实现通用树

java - Java 中的内存泄漏。如何清除列表?

javax @Pattern 验证字符大小范围的正则表达式

java - 当从类创建对象时,公共(public) Java 方法实际上会被复制到新对象中吗?

javascript - DropDown 未填充到 KENDO Grid 中