数组并没有对equals进行Override,依然是Object的equals
如:
public boolean equals(Object obj) {
return (this == obj);
}
因此数组使用equals时效果和“==”相同
//String的equals源码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
public static void main(String[] args)
{
System.out.println("Hello World!");
char[] c1 = {'a','b','c','d','e'};
char[] c2 = {'a','b','c','d','e'};
//输出false
System.out.println("注意跟String的equals的区别:" + c1.equals(c2));
String s = "abcde";
//输出false,参考源码就可以知道,由于c1并不是String类型,故为false
System.out.println(s.equals(c1));
char[] c3 = s.toCharArray();
//输出false
System.out.println(c1.equals(c3));
//输出true,所以如果比较两个字符数组,可以使用Arrays的静态方法
System.out.println(Arrays.equals(c1,c3));
}