2012-09-05 27 views
0
public class mainB { 
    public mainB(){ 
     System.out.println("java".hashCode()); 
    } 

    @Override 
    public int hashCode() { 
     return 4; 
    } 

    public static void main(String[] args){ 
     new mainB(); 
    } 
} 

重寫的hashCode方法,但是當我運行的應用程序它不顯示4。問題是什麼?的Java壓倒一切的hashCode不顯示效果

+0

謝謝大家瞭解 – kibar

回答

4

你只是做錯了。 "java".hashCode()只需獲取String對象的哈希碼。如果你想得到正確的哈希碼:

1)覆蓋hashCode方法。

2)使用overriden方法創建類的實例。 3)致電hashCode

誠實壓倒hashCode可能會導致效率下降。這就是爲什麼你不應該重寫它,如果你不確定你做得對。如果您不確定,最好的方法是始終在您的IDE(例如Eclipse)中生成它,以便正確執行。

0

更改此:

public mainB(){ 
     System.out.println(this.hashCode()); 
    } 
4

你覆蓋mainB哈希碼的功能,但您使用"java".hashcode()時使用String哈希碼之一。

要使用你的函數,你應該做的:

new mainB().hashcode() 
+0

另外「java」是臨時的,然後垃圾收集,所以你不能再次使用同樣的我是吧? –

+1

@tuğrulbüyükışıkWell字符串哈希碼在組成字符串的字符上應該是一致的。所以你會有相同的。 http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#hashCode() –

1

您已經定義hashCode()方法mainB類。所以,當你創建這個類的一個對象,然後調用hashCode()你會得到4樣:

mainB myObject = new mainB(); 
System.out.println(" HashCode = " + myObject.hashCode()); 

當你寫下面的:

System.out.println("java".hashCode()); 

你在一個String實例調用hashCode()方法。

0

您顯示了包含單詞"java"的字符串的哈希碼。 您的實現更改爲

System.out.println(hashCode());

和你hashCode()將被調用。