我在 Java 中執行以下簡單的 main 方法。公共課基礎{
public static void main(String[] args) {
String p=new String();
System.out.println(p);
int[] a= new int[1];
System.out.println(a);
}
}
Array 參考變數的輸出是 classname@hashcodeinhexadecimal,這似乎沒問題,但 String 參考變數沒有輸出。不是應該回傳堆中創建的新String物件的hashcode嗎?
提前致謝
uj5u.com熱心網友回復:
String 是一個類,字串的輸出(甚至是文字)通過 toString 覆寫列印,正如人們所期望的那樣。陣列是物件,但它是語言的固有部分,因此它們的表示不會被覆寫,而是從 Object 類內部繼承。JLS 的第 10.8 節說。
盡管陣列型別不是類,但每個陣列的 Class 物件都表現為:
? 每個陣列型別的直接超類都是Object。
? 每個陣列型別都實作了介面 Cloneable 和 java.io.Serializable。
如果您想查看由涉及“abc”的計算產生的實際 hashCode,請執行以下操作。兩者都會給出相同的結果。
String s = new String("abc"); // normally overkill
System.out.println("abc".hashCode());
System.out.println(s.hashCode());
如果您想查看hashCode被覆寫之前的內容(未定義但可能是物件的記憶體地址),請執行以下操作:
System.out.println(System.identityHashCode("abc"));
System.out.println(System.identityHashCode(s));
對于陣列,您也可以這樣做。這些將是相同的,因為陣列從 Object 繼承它們的 hashCode 而不考慮內容。
int[] a = {1};
System.out.println(a.hashCode());
System.out.println(System.identityHashCode(a));
a[0] = 12345;
System.out.println(a.hashCode());
System.out.println(System.identityHashCode(a));
uj5u.com熱心網友回復:
因為String覆寫Object#toString(). 如果您想列印出String物件的哈希碼,只需呼叫String#hashCode().
uj5u.com熱心網友回復:
String不帶引數呼叫的建構式回傳一個 String 物件,它表示一個空字符序列。所以System.out.println它列印一個空的字符序列,在標準輸出中顯示為空。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/403804.html
標籤:
上一篇:例外:如何顯示導致例外的函式?
下一篇:添加整數字串:回圈的索引越界例外
