在Java中工作,假设我有两个对象,这要归功于obj.getClass().isArray()
,我知道它们都是数组。进一步说,我想将这两个数组相互比较-
可能使用Arrays.equals
。有没有一种优雅的方法可以做到这一点,而无需借助详尽的if /
else树来弄清楚Arrays.equals
需要使用哪种口味?我正在寻找比这更令人讨厌的东西:
if (obj1 instanceof byte[] && obj2 instanceof byte[]) {
return Arrays.equals((byte[])obj1, (byte[])obj2);
}
else if (obj1 instanceof boolean[] && obj2 instanceof boolean[]) {
...
您可以使用反射。
public static boolean arrayEquals(Object arr1, Object arr2) throws Exception {
Class<?> c = arr1.getClass();
if (!c.getComponentType().isPrimitive()) {
c = Object[].class;
}
Method m = Arrays.class.getMethod("equals", c, c);
return (Boolean) m.invoke(null, arr1, arr2);
}
反射仅用于在运行时找到正确的方法,而不会引起您的回避。实际Arrays.equals
方法应该运行得很快。
显然,生产版本需要更强大的异常处理。您可能还想使用deepEquals(Object[], Object[])
代替equals(Object[], Object[])
非原始数组。
我的任务是用java编写mergesort,任务还规定我不能使用整数,我必须使用可比较的整数。这是我第一次使用java。我的问题是在合并函数内比较两个comp int数组中的元素。我尝试了if(list[I])compareTo(list2[j]),但compareTo只能取整数。任何帮助都将不胜感激
数组相等的条件不仅要求数组元素的个数必须相等,而且要求对应位置的元素也相等。Arrays 类提供了 equals() 方法比较整个数组。语法如下: 其中,arrayA 是用于比较的第一个数组,arrayB 是用于比较的第二个数组。 例 1 下面代码演示 Arrays 类的 equals() 方法的使用。 上述代码中定义 3 个数组,分别为 score1、score2 和 score3。第一个数组直
编辑问题以包括所需的行为、特定问题或错误,以及再现问题所需的最短代码。这将帮助其他人回答这个问题。 我的任务是用java编写mergesort,任务还规定我不能使用整数,我必须使用可比较的整数。这是我第一次使用java。我的问题是在合并函数内比较两个comp int数组中的元素。我尝试了if(list[I])compareTo(list2[j]),但compareTo只能取整数。任何帮助都将不胜感
问题内容: 为什么m和t都是假的?比较Java中2个数组的正确方法是什么? 问题答案: 使用Arrays.equals方法。例:
问题内容: 我不知道为什么所有人都打印错误。 当我运行“ java ByteArray”时,答案是“ false false false false”。 我认为a []等于b [],但是JVM告诉我我错了,为什么?? 问题答案: 如果要比较包含基本类型值(例如字节)的数组的实际内容,请使用此选项。 使用了包含对象数组的比较。
问题内容: 我有一个带有〜已知二进制序列的字节数组。我需要确认二进制序列是应该的。除之外,我还尝试了其他方法,但均无济于事。 问题答案: 在您的示例中,您具有: 在处理对象时,java中会比较 参考值 。您正在检查对by返回的数组的引用是否与所保存的引用相同,这当然永远不会正确。此外,数组类不会覆盖,因此其行为仅是比较参考值。 为了比较两个数组的 内容 ,Arrays类提供了静态数组比较方法。