一、==
1.==本质上是一种运算符
2.==既可以比较基本数据类型(byte,short,int,long,float,duble,char,boolean),也可以比较引用类型
3.==比较基本数据类型时,比较的是值是否相等;
比较引用数据类型时,比较的是对象的地址,本质是比较是否为同一对象;
二、equals
1.equals本质上是一种方法
2.equals只能用于比较引用数据类型
3.equals比较引用数据类型时,本质上与==相同,即在Object类中与==相同,但Object子类方法中经常被重写
(下图为Object类中equals方法的源码)
//Object类中equals方法的源码
public boolean equals(Object obj) {
return (this == obj);
}
String类中的equals方法重写:
先判断传入的值运行类型是否为String,如果是,将该类型向下转型把编译类型改为String后再比较两个字符串的值是否相同;Integer同理。
String类中的equals方法源码
总结:
比较基本类型时:
- ==:比较数值是否相等
- equals():不能使用
比较引用类型时:
- ==:比较的是两个字符串内存地址(堆内存)的数值是否相等,即是否为同一对象;
- equals():Object类中与==相同,String类中比较的是两个字符串的内容,属于内容比较。