java中经常遇到判断对象是否一致的场景,这里记录一下常用的三个关键字(或运算符)的区别。
instanceof:
多见于多态或继承关系中类型转换(即强制类型转换与自动转换)时判断类型是否一致,A instanceof B是用来判断内存中实际对象A是不是B类型。
用伪代码来表现Java语言规范所描述的运行时语义如下:
// obj instanceof Tbooleanresult;
if(obj==null){
result =false;
}else{
try{
T temp = (T)obj;// checkcast
result =true;
}catch(ClassCastExceptione){
result=false;
}
}
本处引用,更详细请参见知乎大神回答。
==:
判断当前对象引用内存地址是否一致,即是否是其本身。
equals:
Object类中的equals用于检测一个对象是否等于另外一个对象,即是否跟比较对象一致,但不必是其本身。大多应用场景(例如子类判断)需要我们自己去实现equals方法,用来做自定义的判断。
有一个比较简单形象的例子用于区别==与equals:
if(真美猴王==假美猴王){
returnflase;
}
if(真美猴王.equals(假美猴王)){
returntrue;
}