2014-12-31 33 views
0
class Point { 
    private int xPos, yPos; 

    public Point(int x, int y) { 
     xPos = x; 
     yPos = y; 
    } 
    public static void main(String[] args) { 
     System.out.println(new Point(10,20)); 
    } 
} 

以上代碼的輸出返回對象的哈希碼的同一類名@十六版,雖然我對SG伽內什圖沙·夏爾馬指(OCPJP指南文本)狀態「十六進制值對於每個實例都是不同的。」我沒有正確理解這個嗎?的Java:的ToString()打印相同的hashCode每次

+1

你一次又一次地運行此同一程序?或者你的意思是你正在創建'Point'的另一個實例,但獲得相同的值? –

+0

@ shree.pat18:我正在運行相同的程序。 – sk89

回答

2

嘗試使兩個實例,

System.out.println(new Point(10, 20)); 
System.out.println(new Point(10, 20)); 

,你會得到兩個不同的哈希碼。

+0

是的,確實發生過。但是我想了解的是,應該運行原始程序,每次給我相同的輸出? – sk89

+0

@ sk89當然可能。特別是如果它。 –

3

對於hashCode#JavaDoc

只要它是一個 執行的Java應用程序在同一對象上多次調用,hashCode方法必須始終 返回相同的整數...

在這裏,你是在談論[email protected],將程序的執行過程中保持不變,但如果你一次又一次地運行程序,你可以每次都相同或得到這個代表不同幾次,因爲它取決於哈希碼和內存分配。

+0

如果它的相同用於多次執行程序? – Prashant

0

呀!......做兩個像上面並嘗試...

public static void main(String[] args) {System.out.println(new Point(10,20));} 

上面的代碼創建一個只..

+1

你爲什麼寫在答案???你可以發表評論 – Prashant

+0

只是爲了解釋。 –

0

如果你運行同一程序多次所以不確定性,它將返回相同對象的相同HashCode或不同HashCode。這取決於您的Hashcode()實現。

該整數不必保持從應用到同一應用程序的另一個執行的一個執行一致的。

+0

我正在使用默認的toString實現。我只是想知道如果輸出將保持相同的程序多次執行相同。 – sk89

+0

是的,這可能是相同的幾個執行沒有把握,當它會給新的hashCode。更好的是你可以重寫hashCode()並編寫一些表達式來幫助你檢查輸出。 – Prashant

2

你無法預知的hashCode,將您參考調用,但你可以找到總是哈希碼是唯一的。默認情況下toString()打印你的類從Object類繼承的hashCode()。 首先您應該知道何時使用哈希碼。如果您編寫以下代碼,您將看到您正在繼承的Object的hashCode()實現的兩個不同的哈希碼。

public class Point { 

    private int xPos, yPos; 
    public Point(int x, int y) { 
     xPos = x; 
     yPos = y; 
    } 
    public static void main(String[] args) { 
     System.out.println(new Point(10,20)); 
     System.out.println(new Point(10,20)); 
    } 
} 

但是,如果你想插入你的對象到HashSet,HashMap集合中,它將不起作用。爲了這個工作,你必須在你的Point類中重寫hashCode()。我不能寫代碼,但壓倒一切的hashCode()方法取決於你自己的要求,我不知道...
所以最後我想說的是這是一個最好的做法來實現的hashCode(),toString()方法,等於()方法在我們每一個自定義類。

相關問題