关于原始类型在 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();
这有点像乔有一张写有他的地址的纸。这张纸是变量a
; HashMap
对象是他的房子。
现在:
Map b = a;
a
中的值被复制到b
中。这就像玛丽走过来,拿出一张纸,将乔的地址从他的纸上抄下来。 房子尚未被复制,只是有关其位置的信息。
这就是对象引用:告诉 JVM 对象在内存中的位置的信息(如数字)。
我会详细介绍一下 in this answer (Java)和this one (这是关于 JavaScript 的,但是值、变量和对象引用的概念在两种语言 [以及许多其他语言] 中是相同的)。
关于java - 为什么对象分配引用内存位置,而基本类型则不然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34952927/