equals()和==的区别(Java)

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){
    
}

Null:
  1. 如果对比对象object不为null,则object==null将返回false,否则返回true

  2. 如果对比对象object不为null,object.equals(null)会返回false,否则抛出空指针异常NullPointerExceptrion

所以和null对比只能用==;

发现新的再更新 #_#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值