==:
==是一个比较运算符,,==对比的是栈中的值,既可以判断基本类型,又可以判断引用类型,基本数据类型是变量值,引用类型是堆中内存对象的地址。
如果判断基本类型,判断的是值是否相等。示例: int i=10: double d=10.0
如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
equals:
equals: 是Object类中的方法,Object类中默认也是采用==比较,通常会重写只能判断引用类型,默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如看看 Integer 和String
类的equals 源代码。
1)Object
类的
equals 源代码:
//
即
Object
的
equals
方法默认就是比较对象地址是否相同
//
也就是判断两个对象是不是同一个对象
.
public
boolean
equals(Object
obj) {
return (
this ==
obj);
}
2)String
类的
equals 源代码:
public
boolean
equals(Object
anObject) {
if (
this ==
anObject) {
return
true;
}
return (
anObject
instanceof String
aString)
&& (!
COMPACT_STRINGS ||
this.
coder ==
aString.
coder)
&& StringLatin1.
equals(
value,
aString.
value);
}
3)Integer
类的
equals 源代码:
//
从源码可以看到
Integer
也重写了
Object
的
equals
方法
,
//
变成了判断两个值是否相同
public
boolean
equals(Object
obj) {
if (
obj
instanceof Integer) {
return
value == ((Integer)
obj).intValue();
}
return
false;
}