先直接上结论!
- ==:既可以判断基本类型,又可以判断引用类型。
- ==:如果判断基本类型,判断的是值是否相等。实例:
int i = 10;
double d = 10.0;
System.out.println(i == d); // true
- ==:如果判断引用类型,判断的是地址是否相等,即判定是不是同一对象。
- equals:是Object类中的方法,只能判断引用类型。(即int i不能使用.equals方法,但Integer i可以)
- equals:默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等,比如Integer、String等等。
查看源码
Object.java
public boolean equals(Object obj) {
return (this == obj);
}
String.java
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (!COMPACT_STRINGS || this.coder == aString.coder) {
return StringLatin1.equals(value, aString.value);
}
}
return false;
}
Integer.java
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
源码解析
我们可以通过源码对照写在前面的结论。
- Object类直接使用==,因此对照==判断引用类型的情况,即判断地址。
- String类和Integer类作为Object类的子类,都对equals方法进行了重写,功能变成了判断值是否相等。
深入理解String
对于String,我们常说:
==用来判断地址
,equals用来判断值
。
归根结底地解释,就是==用于String这种引用类型时,作用是判断地址;
equals经过查看Java源码后得知,其继承Object类,但重写了equals方法,功能判断两个字符串的值是否相等。
后记
经过这样的探讨,我们对于==和equals会有更加深刻的理解。
对你有帮助的话,记得点赞收藏哦~