equals()和==的区别(Java)
“==”用法
- 基本数据类型:双等号比较的是值
- 引用数据类型:双等号比较的是内存中的地址
equals()用法
- 没有重写equals()方法:比较内存中的地址
- 重写了equals()方法:参照重写的方法
重写了equals()方法的类:
String:
重写的equals()方法比较字符串内容;
字符串判等全部使用equals()方法,双等号是根据内存地址进行判断。
判断字符串是否为null时用==,判断是否为空串时比较长度 eg. string.length()!=0
Integer:
重写的equals()方法比较整形变量的值;
注:当给Integer对象赋值时,-128到127之间的值会缓存到IntegerCache.cache中,所以给Integer对象赋值在-128到127之间时,返回的是同一个对象,此时用双等号和equals()方法比较都为true
Java自动装箱规范要求boolean、byte、char<=127,介于-128~127之间的short和int被包装到固定的对象中。
注:所有相同类型的包装类对象之间值的比较,全部使用equals()方法比较。
枚举类:
eg:
public enum Size {
SMALL,MEDIUM,LARGE,EXTRA_LARGE};
这个声明定义的类型其实是一个类,它刚好有4个实例。比较两个枚举类型的值时,永远不需要调用equals,直接调用“==”即可。
类对象(反射):
虚拟机为每个类型管理一个Class对象,因此可以利用==运算符实现两个类对象比较,eg:
Employee e = new Employee();
if(e.getClass()==Employee.class){
}
发现新的再更新 #_#