2016-01-22 33 views
0

我有一個奇怪的問題,關於原始類型如何在Java中工作。當使用對象時,你分配一個對象A是對象B像這樣爲什麼對象分配是指基本類型不存在時的內存位置?

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

現在對象A參考對象B的內存位置的任何電話。但是,當使用整數或其他原始類型時,情況並非如此。例如

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

y會返回3,即y初始化時x的值。

我有的問題是爲什麼對象的賦值在內存中創建引用,而基元使對方的值的副本?除了這是有用的這個事實之外,這是如何在Java中實現的呢?

我會很感激任何能夠讓我更好地理解基本類型和對象之間賦值如何工作的人。

+2

[Java是「通過引用傳遞」還是「按值傳遞」?](https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-按值) – Ferrybig

+1

Java有兩種類型的變量。僅供參考和參考。當您複製基元時,它是複製的基元值,當您複製基準時,它是複製的基準值。沒有「分配給對象」 –

回答

5

完全相同的事情完成變量是否是原始類型或引用類型的:該在可變保持被複制到其它變量。

唯一的區別是,在與參考類型的變量保持的值是一個參考實際事物(對象),而不是實際的事情本身,而對於原始類型在該變量中的值是實際的東西(原始值)。

假設你有:

int a = 5; 

這是一個有點像患有與5一張紙(可變a)寫上喬。

現在:

int b = a; 

價值a被複制到b。這有點像瑪麗走過來,拿出一張紙,抄下喬的一張紙(第5張)。

現在,假設你有:

Map a = new HashMap(); 

這有點像有一張紙,他的地址寫在上面喬。這張紙是變數a; HashMap對象是他的房子。

現在:

Map b = a; 

價值a被複制到b。這就像瑪麗走過來,拿出一張紙,把喬的地址從他的紙上覆制到它上面。 房屋尚未複製,只是關於它在哪裏的信息。

這就是對象引用:信息(如數字)告訴JVM對象在內存中的位置。 (這是關於JavaScript,但值,變量和對象引用的概念在兩種語言[和許多其他]中是相同的)。在這裏我將詳細討論一下in this answer(Java)和this one

相關問題