基本数据类型
==用于比较值是否相等
对象
- ==用于比较两个对象的起始内存地址是否相等
- equals也用于比较两个对象的起始内存地址是否相等,因此大部分情况下,==和equals作用是一致的,但是如果某些对象重写了equals方法,那么结果就不一样了。
比如常见的String类,由于重写了equals方法,因此String的equals方法实际上比较的是字符串的值是否相同,而==比较的是字符串的起始地址是否相同
instanceof
同时对于instanceof来讲,主要是比较某个对象是否是后一个类的实例或者是后一个类的子类的实例
public class A{
}
public class B extends A{
}
class C{
void main(){
A a1 = new A();
A a2 = new B();
B b = new B();
boolean flag = a1 instanceof A;//返回true
flag = a1 instanceof B;//返回false
flag = a2 instanceof B;//返回true
flag = b instanceof A;//返回true
flag = b instanceof B;//返回true
}
}
如果我们要判断某个对象是否是指定的类时,我们可以使用getClass+equals来进行判断,getClass返回的是运行时对象的class对象,.class返回的是编译时类的class对象
public class A{
}
public class B extends A{
}
class C{
void main(){
A a1 = new A();
A a2 = new B();
B b = new B();
boolean flag = a1.getClass().equals(B.class);//返回false
flag = a1.getClass().equals(A.class);//返回true
flag = a2.getClass().equals(A.class);//返回false
flag = a2.getClass().equals(B.class);//返回true
}
}