同一クラスのオブジェクトを複数生成してハッシュ値(ハッシュコード)を調べる

*1字下げが反映されてないorz 今度暇なときにでも直す

public class Duck {
 int size;

 // コンストラク
 public Duck (int ducksize) {
  size = ducksize;

  if (ducksize < 25)
   System.out.println("ピヨピヨ");
  else
   System.out.println("グワオグワオウゥゥ!!");

  System.out.println("ducksize = " + ducksize);
 }
}

  • テストコード

public class DuckSizeTester {
 public static void main(String[] args) {

  // ducksize = "32"のオブジェクトを生成してハッシュコードを調べてみる
  System.out.println(new Duck(32).hashCode() + "\n");

  // ducksize = "12"のオブジェクトを生成してハッシュコードを調べてみる
  System.out.println(new Duck(12).hashCode() + "\n");

  // Duckクラスのsizeに"5"を代入してオブジェクト生成34
  Duck d = new Duck(5);
  // ハッシュコードを調べてみる
  System.out.println(d.hashCode() + "\n");

  // 34を代入してみる
  d.size = 34;

  // 新しいオブジェクト生成
  new Duck(d.size);
  // ハッシュコードを調べてみる
  System.out.println(d.hashCode() + "\n");
  System.out.println(new Duck(d.size).hashCode() + "\n");
 }
}

  • 実行結果

グワオグワオウゥゥ!!
ducksize = 32
22068557

ピヨピヨ
ducksize = 12
29115481

ピヨピヨ
ducksize = 5
19621457

グワオグワオウゥゥ!!
ducksize = 34
19621457

グワオグワオウゥゥ!!
ducksize = 34
4872882


おお。
インスタンスが同一状態(全フィールドの値がいっしょ)のときはハッシュ値も同じだ!

*1:自分メモ