[英]Trouble comparing two Arrays
我正在研究一些代码,但无法弄清楚为什么当两个数组相等时我的equals方法返回false。
public class Equal {
static int[] a;
public static boolean equals(int[] b){
for(int i=0;i<b.length;i++){
if(a[i] != b[i]) return false;
}
return true;
}
public static void main(String[] args){
int[] a = new int[3];
a[0]=1; a[1]=2; a[2]=3;
int[] b = new int[3];
b[0]=1; b[1]=2; b[2]=3;
System.out.println(a.equals(b)); //returns false (but why??)
System.out.println(Arrays.equals(a,b)); //returns true as expected
}
}
因为数组类型是从java.lang.Object
继承其equals()
方法的,所以将其实现为
public boolean equals(Object obj) {
return (this == obj);
}
而且,这个static
字段
static int[] a;
被局部变量遮盖
int[] a = new int[3];
同名。
您没有调用您编写的equals
方法。 您正在调用数组自己的equals
方法。 调用自己的函数:
System.out.println(equals(b));
您还需要更改以下行:
int[] a = new int[3];
分配给静态a
,或改变equals
采取两个阵列,而不是相对于一个静态a
阵列。
调用a.equals()
不会调用您编写的方法。 它确实调用了Int[].equals()
,它等于Object.equals()
因为Int []继承了那个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.