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 は表示されません。何が問題ですか?

4

5 に答える 5

4

あなたは単にそれを間違っています。オブジェクト"java".hashCode()のハッシュコードを取得するだけです。String正しいハッシュコードを取得したい場合:

1) メソッドをオーバーライドしhashCodeます。

2)オーバーライドされたメソッドでクラスのインスタンスを作成します。

3) 電話するhashCode

正直にオーバーライドhashCodeすると危険であり、効率が低下する可能性があります。これが、正しく行っているかどうか確信が持てない場合は、オーバーライドしてはならない理由です。確信が持てない場合、適切に実行される IDE (Eclipse など) で生成するのが常に最善の方法です。

于 2012-09-05T09:17:00.223 に答える
4

mainBハッシュコード関数をオーバーライドしていますが、使用String時にハッシュコード 1 を使用し"java".hashcode()ます。

関数を使用するには、次のことを行う必要があります。

new mainB().hashcode()
于 2012-09-05T09:17:29.227 に答える
1

hashCode()クラス のメソッドを定義しましmainBた。したがって、このクラスのオブジェクトを作成して呼び出すと、次のhashCode()ように 4 つ取得されます。

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

そして、次のように書くと:

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

hashCode()インスタンスでメソッドを呼び出していStringます。

于 2012-09-05T09:17:57.353 に答える
0

これを変える :

public mainB(){
        System.out.println(this.hashCode());
    }
于 2012-09-05T09:17:16.403 に答える
0

word を含む文字列のハッシュ コードを表示しています"java"。実装を次のように変更します

System.out.println(hashCode());

そしてあなたのhashCode()意志が呼ばれます。

于 2012-09-05T09:18:26.433 に答える