gpt4 book ai didi

java - 为什么对象分配引用内存位置,而基本类型则不然?

转载 作者:行者123 更新时间:2023-12-02 05:10:11 25 4
gpt4 key购买 nike

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

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

对 ObjectA 的任何调用现在都会引用 ObjectB 的内存位置。然而,当使用整数或其他基本类型时,情况并非如此。例如

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

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

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

如果有人能让我更好地理解基本类型和对象之间的赋值工作原理,我将不胜感激。

最佳答案

无论变量是原始类型还是引用类型,都会执行完全相同的操作:变量中保存的将复制到另一个变量。

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

假设你有:

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 的,但是值、变量和对象引用的概念在两种语言 [以及许多其他语言] 中是相同的)。

关于java - 为什么对象分配引用内存位置,而基本类型则不然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56330532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com