簡體   English   中英

Java引用值是地址值?

[英]Java references values are addresses values?

當我做:

int x[] = new int[2];
System.out.println("...> " + x);

輸出值如下: [I@1b67f74

以便十六進制數與已分配對象的內存地址有關?

[I意思是什么?

不,該十六進制數不應被解釋為對象所在的內存地址。 實際上,它是對象的哈希碼。 Object.toString()的API文檔說:

類Object的toString方法返回一個字符串,該字符串由對象為實例的類的名稱,符號字符“@”以及對象的哈希碼的無符號十六進制表示組成。 換句話說,此方法返回一個等於值的字符串:

  getClass().getName() + '@' + Integer.toHexString(hashCode()) 

java.lang.Object.hashCode()的API文檔說:

盡可能合理,Object類定義的hashCode方法確實為不同的對象返回不同的整數。 (這通常通過將對象的內部地址轉換為整數來實現,但JavaTM編程語言不需要此實現技術。)

因此,對於Sun的JVM,如果不覆蓋hashCode()方法,那么它確實是對象的內存地址,但不能保證這樣,所以你不應該依賴它。

沒有(真實的,可靠的)方式(適用於任何JVM)以獲得純Java中對象的內存地址; Java沒有指針,引用與指針不完全相同。

Java虛擬機規范的4.3.2節解釋了[I意思; 在這種情況下,它意味着您的變量是一個int數組。

來自: Java:“[B @ 1ef9157”背后的語法和含義? 二進制/地址?

十六進制數字是對象ID或哈希碼。

[I意思是它是一個數組( [ ]的整數( I )。

[我代表一個int數組的類名。 vm中的地址編號,但由於hashCode通常被覆蓋,因此直接使用它來識別對象並不明智。 為此,使用System.identityHashcode(Object x),它以可靠的方式返回相同的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM