equals vs Arrays.equals in Java
在Java中比较数组时,以下2个语句之间有什么区别吗?
Object[] array1, array2;
array1.equals(array2);
Arrays.equals(array1, array2);
如果是这样,它们是什么?
在Java中比较数组时,以下2个语句之间有什么区别吗?
Object[] array1, array2;
array1.equals(array2);
Arrays.equals(array1, array2);
如果是这样,它们是什么?
array1.equals(array2)
与 相同,即它是否是相同的数组。正如@alf指出的那样,这不是大多数人所期望的。array1 == array2
Arrays.equals(array1, array2)
比较数组的内容。
同样,可能不是很有用,您需要使用。array.toString()
Arrays.toString(array)
这是一个臭名昭著的问题:因为数组严重损坏,永远不要使用它。.equals()
也就是说,它并不像“有人以一种非常错误的方式做了这件事”那样“破碎”——它只是在做定义的事情,而不是通常期望的事情。所以对于纯粹主义者来说:这完全没问题,这也意味着,永远不要使用它。
现在的预期行为是比较数据。默认行为是比较身份,因为没有任何数据(对于纯粹主义者:是的,它有,但这不是重点);假设是,如果你需要在子类中,你会实现它。在数组中,没有适合您的实现,因此您不应该使用它。equals
Object
equals
因此,区别在于,按照您的期望工作(即比较内容),回退到实现,这反过来又比较了身份,因此更好地替换为(对于纯粹主义者:是的,我知道)。Arrays.equals(array1, array2)
array1.equals(array2)
Object.equals
==
null
问题是,如果数组的元素不能正确实现,甚至会咬你一口。我知道这是一个非常幼稚的说法,但有一个非常重要的不太明显的案例:考虑一个2D数组。Arrays.equals(array1, array2)
equals
Java中的2D数组是数组的数组,数组是损坏的(或者如果您愿意,则无用),因此在2D数组上不会像您期望的那样工作。equals
Arrays.equals(array1, array2)
希望有所帮助。