==号与equals方法
在Java中==号在比较基本数据类型的时候比较的是值,在比较引用数据类型时比较的是地址
而在equals方法中,当类中没有重写equals方法时与 ==号的作用一样,都是判断地址是否相等,在Java中一般会重写equals方法,这时,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;
}
在String类的equals方法中先判断了对象地址是否相等,如果对象地址相等说明两个引用指向了同一个对象,这个时候也就没有必要比对字符串了,毕竟这十分耗时间。然后使用instanceof String判断是否为String的实例,然后在判断字符串长度相等的前提下,比对完所有字符串。