[英]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()
方法被使用。 該方法定義如下:
類
Object
的toString
方法返回一個字符串,該字符串由對象為實例的類的名稱,符號字符“@”和對象的哈希碼的無符號十六進制表示組成。 換句話說,此方法返回一個等於值的字符串: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.