1 public class Hashcode {
2 public static final boolean doPrintHashes = false;
3 public static final int N = 20;
4 public static final int N2 = N/2;
6 public static void compareHashes(int[] a, int[] b) {
9 for (int i=0; i<a.length; i++)
11 System.out.println("\tHash #" + i + " changed!");
16 System.out.println("\tHashes are DIFFERENT!");
18 System.out.println("\tHashes are ok.");
21 public static void printHashes(int[] a) {
22 for (int i=0; i<a.length; i++)
23 System.out.println("\t#" + i + ": " + a[i]);
26 public static int[] getHashes(Object[] a) {
27 int[] result = new int[a.length];
29 for (int i=0; i<a.length; i++)
30 result[i] = System.identityHashCode(a[i]);
35 public static void main(String[] s) {
36 Object[] a = new Object[N];
37 int[] hashes1, hashes2;
39 System.out.println("Creating objects ...");
40 for (int i=0; i<N2; i++)
42 for (int i=N2+1; i<N; i++)
43 a[i] = new String("String-" + i);
45 System.out.println("Forgetting some objects ...");
46 for (int i=0; i<N; i+=2)
49 System.out.println("Getting hashes before GC ...");
50 hashes1 = getHashes(a);
54 System.out.println("Invoking the GC ...");
56 System.out.println("\tfinished.");
58 System.out.println("Getting hashes after GC ...");
59 hashes2 = getHashes(a);
63 System.out.println("Comparing hashes now ...");
64 compareHashes(hashes1, hashes2);