Java - 与对象分配混淆

标签 java oop object

the program

过去几天我一直在关注 Lynda.com java 教程,我对这一部分感到非常困惑,特别是涉及以下行:

p1 = new Property(230000, "Estate", 2.0, 2, 3)

我现在已经将 p1 添加到 ArrayList mls 两次,但是当我使 Property p1 对象等于 Property 类的新对象时,这里到底发生了什么?

我是更改 p1 的初始值还是从“对象 p​​1”创建新对象?

最佳答案

Java 中的对象变量始终是引用。

属性 p1 = new Property(230000, "Estate", 2.0, 2, 3)

这在堆上分配了一个新的 Property 对象,并将 p1 设置为对其的引用。

p1 = some_other_property;

这使得 p1 现在成为对变量 some_other_property 引用的同一属性的引用。我们复制了引用。

一些函数(p1)

这将引用p1复制到了someFunction的参数中。请注意,对引用的所有操作都没有真正更改 Property 对象,我们只是修改了对它的引用。

这也意味着您可以拥有指向同一基础对象的多个引用。如果将 p1 添加到 ArrayList 两次,然后执行更改对象的操作,则 ArrayList 中的两个条目都将反射(reflect)更改(因为两者都引用相同的事物)

这个问题提供了一些相关且有趣的细节:

Is Java "pass-by-reference" or "pass-by-value"?

关于Java - 与对象分配混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35788289/

相关文章:

node.js - 无法重新分配对象键值 - 我的语法是否不正确?

java - 常用输入输出语句

java - Google App Engine 中的 Firebase 初始化错误

java - 修改 jar 文件

oop - 术语 "Namespace"的澄清

php - 写入多维数组的位置

java - 如何正确输出HTTP请求报文

python - 从元类设置实例变量

c++ - C++ 对象成员数组的默认初始化?

java - 怎么了