为什么对象分配指的是原始类型不适用时的内存位置?

时间:2016-01-22 17:47:21

标签: java object variable-assignment primitive

关于原始类型如何在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中实现的?

我很感激能够让我更好地理解基本类型和对象之间的分配如何工作的人。

1 个答案:

答案 0 :(得分:5)

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

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

说你有:

int a = 5;

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

现在:

int b = a;

a中的已复制到b。这有点像玛丽出现,拿出一张纸,然后抄写Joe的那张纸(5号)。

现在,说你有:

Map a = new HashMap();

有点像乔有一张纸,上面写着他的地址。这张纸是变量a; HashMap对象就是他的家。

现在:

Map b = a;

a中的已复制到b。它就像玛丽一样走出来,拿出一张纸,将乔的地址从他的纸上复制到它上面。 house 尚未被复制,只是有关它的位置的信息。

对象引用是什么:告诉JVM对象在内存中的信息(如数字)。

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