Java hashCode陷阱
0
经常会重写hashCode
和equals
方法来实现对象判断是否相等,之前使用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
进行计算。