当我尝试比较两个int数组时,即使它们完全相同,在if (one == two)
中的代码仍然不会被执行。为什么会这样?
Object[] one = {1,2,3,4,5,6,7,8,9};
Object[] two = {1,2,3,4,5,6,7,8,9};
if (one == two){
System.out.println("equal");
} else {
System.out.println("not equal");
}
这里需要注意的几点:
==
比较的是引用而非值,也就是说,你在询问这两个数组是否是同一个实例,而不是它们是否包含相同的值。==
的事实意味着你可能不知道equals()
方法和Object
。这并不是解决当前问题所需的方法,但要知道通常情况下,在比较两个对象的值时,应该使用obj1.equals(obj2)
而不是obj1 == obj2
。现在==
与原始类型如int
(例如纯旧的x == 3
等)一起使用,因此可能是你正在使用它的原因,但我只是想确保你知道equals()
与==
之间的区别。Arrays.equals()
方法在java.util.Arrays
类上。该方法针对所有基本类型进行了重载(在每个元素对下使用==
)以及Object
(在每个对下它肯定会使用equals()
)。public boolean compareArrays(int[] a, int[] b) {
boolean check = true;
if (a!= null && b!= null){
if (a.length != b.length){
check= false;
}else
for (int i = 0; i < b.length; i++) {
if (b[i] != a[i]) {
check= false;
}
}
}else{
check= false;
}
return check;
}
boolean areEqual = Arrays.equals(Arrays.sort(arr1), Arrays.sort(arr2));
==
运算符对对象(包括数组)进行引用相等性检查。如果数组元素是原始类型(如int
),可以使用java.util.Arrays.equals
方法。如果它们本身是对象,则java.util.Arrays.deepEquals
将执行深度相等性测试(前提是数组中的对象提供了适当的Object#equals
覆盖)。If you do this:
if (one == two){
Arrays.equals(one, two)
Arrays.equals(one, two)
==
操作符比较的是在 Java 中继承自 Object 的所有内容的 引用,而不是实际值。这种方法仅适用于基元类型。
Arrays.equals(one,two)
。请记住,这里顺序很重要。 - Deendayal Garg