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));
    }
}

上記のコードの出力は、オブジェクトのハッシュコードの同じ ClassName@hex バージョンを返します。これを正しく理解していませんか?

4

5 に答える 5

3

のためにhashCode #JavaDoc言う

Java アプリケーションの実行中に同じオブジェクトに対して複数回呼び出された場合は常に、hashCode メソッドは一貫して同じ整数を返す必要があります...

ここでは、プログラムの実行中にどれが同じままであるかについて話してClassName@hexいますが、プログラムを何度も実行している場合、この表現はハッシュコードに依存し、メモリ割り当ての影響を受けるため、毎回または同じ数回異なる場合があります。

于 2014-12-31T07:11:53.390 に答える
2

参照で呼び出される hashCode を予測することはできませんが、常に hashcode が一意であることがわかります。デフォルトでは、 toString() は、クラスが Object クラスから継承した hashCode() を出力します。まず、ハッシュ コードをいつ使用するかを知っておく必要があります。次のコードを記述すると、継承している Object の hashCode() 実装の 2 つの異なるハッシュコードが表示されます。

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()、equals( ) すべてのカスタム クラスのメソッド。

于 2014-12-31T10:10:16.693 に答える
2

2 つのインスタンスを作成してみてください。

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

そして、2 つの異なる hashCode を取得します。

于 2014-12-31T06:54:14.453 に答える
0

ええ!...上記のように2つ作って試してみてください...

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

上記のコードは1つだけを作成しています..

于 2014-12-31T07:17:34.120 に答える