import java.util.*;public class Test {
public static void main(String[] args) {
S[] s1 = new S[5];
S[] s2 = new S[5];
S t1 = new S();
S t2 = new S(); Arrays.fill(s1, t1);
Arrays.fill(s2, t2); System.out.println(Arrays.equals(s1, s2));
System.out.println(t1.equals(t2));
}
}class S {
int i = 0;
boolean equals(S b) {
if(this.i == b.i)
return true;
return false;
}
}/*程序的输出是:
false
true可我在《thinking in java》上看到是这样介绍Arrays.equals()的:
“为了能比较数组是否完全相等,Arrays提供了经重载的equals()方法。当然,也是针对各种primitive以及Object的。两个数组要想完全想等,它们必须有相同数量的元素,而且数组的每个元素必须与另一个数组的相对应位置上的元素相等。-->元素的相等性,用equals()判断<-- ”最后那句话的意思不是说,当Arrays.equals()方法的参数为对象数组时,它会调用此类对象的equals()方法吗?可是我已经重载了呀,怎么输出还是False呢?
或者,Arrays.equals()调用的只是根类的equals方法呢?
*/
public static void main(String[] args) {
S[] s1 = new S[5];
S[] s2 = new S[5];
S t1 = new S();
S t2 = new S(); Arrays.fill(s1, t1);
Arrays.fill(s2, t2); System.out.println(Arrays.equals(s1, s2));
System.out.println(t1.equals(t2));
}
}class S {
int i = 0;
boolean equals(S b) {
if(this.i == b.i)
return true;
return false;
}
}/*程序的输出是:
false
true可我在《thinking in java》上看到是这样介绍Arrays.equals()的:
“为了能比较数组是否完全相等,Arrays提供了经重载的equals()方法。当然,也是针对各种primitive以及Object的。两个数组要想完全想等,它们必须有相同数量的元素,而且数组的每个元素必须与另一个数组的相对应位置上的元素相等。-->元素的相等性,用equals()判断<-- ”最后那句话的意思不是说,当Arrays.equals()方法的参数为对象数组时,它会调用此类对象的equals()方法吗?可是我已经重载了呀,怎么输出还是False呢?
或者,Arrays.equals()调用的只是根类的equals方法呢?
*/
class S {
int i = 0; public boolean equals(Object b) {
if (this.i == ((S)b).i)
return true;
return false;
}
}
应该是 boolean equals(Object obj) {
if(!obj instanceof S) return false;
S b = (S) obj;
if(this.i == b.i)
return true;
return false;
}
Arrays.fill(s2, t1);
System.out.println(Arrays.equals(s1, s2));他是这个意思!
equals是public,不能缩小可见性