Java hashCode陷阱

0

经常会重写hashCodeequals方法来实现对象判断是否相等,之前使用Objects.hash这个方法,后来发现这个是有点问题的:

// String一致
System.out.println(Objects.hash(new String[] {"1", "2", "3"}));
System.out.println(Objects.hash(new String[] {"1", "2", "3"}));
// Integer一致
System.out.println(Objects.hash(new Integer[] {1, 2, 3}));
System.out.println(Objects.hash(new Integer[] {1, 2, 3}));
// int不一致
System.out.println(Objects.hash(new int[] {1, 2, 3}));
System.out.println(Objects.hash(new int[] {1, 2, 3}));
// int一致
System.out.println(Arrays.hashCode(new int[] {1, 2, 3}));
System.out.println(Arrays.hashCode(new int[] {1, 2, 3}));

使用Objects.hash计算简单对象的时候结果是不一致的,所以使用Arrays.hashCode进行计算。