簡體   English   中英

System.out.println(對象)的輸出

[英]Output of System.out.println(object)

我想知道當我執行以下操作時輸出到底是什么。

class Data {
  int a = 5;
}

class Main {
  public static void main(String[] args) {
    data dObj = new data();
    System.out.println(dObj);
  }
}

我知道它提供了與對象相關的東西,因為在我的例子中輸出是數據@ 1ae73783 我猜1ae73783是十六進制數。 我也做了一些工作並打印出來

System.out.println(dObj.hashCode());

我的號碼是415360643 我有一個整數值。 我不知道hashCode()返回什么,仍然出於好奇,當我將1ae73783轉換為十進制時,我得到了415360643

這就是為什么我很好奇這個數字到底是什么。 這是Java沙箱的一些內存位置還是其他一些東西?

會發生什么是你的類的默認toString()方法被使用。 該方法定義如下:

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

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

默認的hashCode()方法返回的值是特定於實現的:

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

當您打印類的實例時,它不會覆蓋toString方法,而是使用Object類的toString方法。 以表格形式打印輸出: -

data@1ae73783
  • output的第一部分顯示了對象的類型。

  • 第二部分是對象的hashCode的十六進制表示。

這是Object.toString()方法的源代碼,您可以在jdk的安裝目錄中找到src文件夾: -

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Object類中的hashCode()toString()的Javadoc應該能夠為您闡明這一點。

該代碼調用Object類的默認toString()實現,即:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

暫無
暫無

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

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