【问题标题】:Why do object assignments refer to memory locations when primitive types don't? [duplicate]为什么对象分配引用内存位置而原始类型不引用? [复制]
【发布时间】:2016-04-29 10:05:36
【问题描述】:

关于原始类型在 Java 中的工作方式,我有一个奇怪的问题。当您将 ObjectA 分配为 ObjectB 时使用 Objects 时就像这样

Rectangle ObjectB = new Rectangle();
ObjectA = ObjectB;

任何对 ObjectA 的调用现在都指向 ObjectB 的内存位置。但是,当使用整数或其他原始类型时,情况并非如此。例如

int x = 3;
int y = x;
int x = 5;
return y;

y 将返回 3,即初始化 y 时 x 的值。

我的问题是为什么对象的赋值会在内存中创建引用,而基元会复制彼此的值?除了这很有用之外,它是如何在 Java 中实现的?

如果有人能让我更深入地了解原始类型和对象之间的赋值是如何工作的,我将不胜感激。

【问题讨论】:

标签: java object variable-assignment primitive


【解决方案1】:

无论变量是原始类型还是引用类型,完全相同:变量中保存的被复制到另一个变量中。

唯一的区别是,具有引用类型的变量中保存的值是对实际事物(对象)的引用,而不是实际事物本身,而变量中的值原始类型实际的东西(原始值)。

假设你有:

int a = 5;

这有点像 Joe 有一张纸(变量 a),上面写着 5。

现在:

int b = a;

a 中的 被复制到b。这有点像玛丽走过来,拿出一张纸,抄下乔的纸上的内容(数字 5)。

现在,假设你有:

Map a = new HashMap();

这有点像乔有一张纸,上面写着他的地址。这张纸是变量aHashMap 对象是他的房子。

现在:

Map b = a;

a 中的 被复制到 b。这就像玛丽走过来,拿出一张纸,把乔的地址从他的纸上抄到纸上。 房子没有被复制,只是关于它在哪里的信息。

这就是对象引用的含义:告诉 JVM 对象在内存中的位置的信息(如数字)。

我详细介绍了in this answer(Java)和this one(这是关于 JavaScript,但是值、变量和对象引用的概念在两种语言中是相同的 [还有许多其他语言] )。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-06
    • 2021-08-18
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2012-10-26
    相关资源
    最近更新 更多