总结:
- ==是操作符,equals是方法。
- 对于基本数据类型(byte,short,int,long,float,double,char,boolean)来说,只能使用==来比较且比较他们的值。
- 对于引用类型(String,数组,类,接口)来说,
- 若没有重写equals方法,则==与equals作用一样,都是比较他们在内存中的存放地址。euqals底层源码。
public boolean equals(Object obj) {
return (this == obj);
}
2. 像String或重写了equals方法的,当使用 == 比较内存的存放地址不相等时,接下来会 比较字符串的内容是否相等。下面是String重写equals底层源码。
@Override public boolean equals(Object other) {
if (other == this) {
return true;
}
if (other instanceof String) {
String s = (String)other;
int count = this.count;
if (s.count != count) {
return false;
}
if (hashCode() != s.hashCode()) {
return false;
}
char[] value1 = value;
int offset1 = offset;
char[] value2 = s.value;
int offset2 = s.offset;
for (int end = offset1 + count; offset1 < end; ) {
if (value1[offset1] != value2[offset2]) {
return false;
}
offset1++;
offset2++;
}
return true;
} else {
return false;
}
}