当原始类型没有时,为什么对象分配引用内存位置?

Wes*_*mer 0 java primitive object variable-assignment

关于原始类型如何在Java中工作,我有一个奇怪的问题.将ObjectA指定为ObjectB时使用对象时是这样的

Rectangle ObjectB = new Rectangle();
ObjectA = ObjectB;
Run Code Online (Sandbox Code Playgroud)

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

int x = 3;
int y = x;
int x = 5;
return y;
Run Code Online (Sandbox Code Playgroud)

当y被初始化时,y将返回3,即x的值.

我的问题是为什么对象的赋值在内存中创建引用,而原语会复制彼此的值?除了这个有用的事实,这是如何在Java中实现的?

我很感激能够让我更好地理解赋值在原始类型和对象之间如何工作的人.

T.J*_*der 5

同样的事情做变量是不是基本类型或引用类型:该的变量中被复制到另一个变量.

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

说你有:

int a = 5;
Run Code Online (Sandbox Code Playgroud)

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

现在:

int b = a;
Run Code Online (Sandbox Code Playgroud)

a被复制到b.这有点像玛丽出现,拿出一张纸,然后复制乔的纸上的数字(数字5).

现在,说你有:

Map a = new HashMap();
Run Code Online (Sandbox Code Playgroud)

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

现在:

Map b = a;
Run Code Online (Sandbox Code Playgroud)

a被复制到b.这就像玛丽出现并拿出一张纸,将乔的地址从他的纸上复制到它上面.该房子还没有被复制,只是它在哪里的信息.

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

我进入它的一些细节在这个答案(渣),和这一个(这是关于JavaScript的,但值,变量和对象引用的概念是在两种语言[等等]相同).