java里的==和equals,int和Integer的相等判断

本文详细探讨了Java中==与equals的区别,指出“==表示比较地址,equals表示比较属性”这一常见说法的错误。文章解释了在基本数据类型和引用类型中,==实际比较的内容。同时,阐述了equals方法主要用于引用类型中成员变量的比较,并强调了equals方法与hashCode方法在HashMap等数据结构中的不同作用。最后,提到了Integer类型的相等判断情况。
摘要由CSDN通过智能技术生成

java里的==和equals,int和Integer的相等判断

1、“==表示比较地址,equals表示比较属性”这句话是错的

论证为什么是错的,思考一个问题:int a = 1; int b = 1; a == b 是true还是false?按照上面话,比较的是地址,自然是false了,但实际情况却是true,可以得出上面前半句是错误的

代码

int a = 1;
int b = 1;
System.out.println("a==b -> " + (a==b));

结果

a==b ->true
2、==表示真正的意思是什么

从概念方面来说:

  • 基本数据类型:变量名指向具体的数值
  • 引用类型:变量名指向存储数据的内存地址,即变量名指向hash值

从内存构建方面来说:

  • 基本数据类型:变量声明了,jvm就会立刻给它分内存空间
  • 引用类型:声明时,不会立刻分配内存,而是存储了一个内存地址,指向内存中的对象,内存中的对象有三部分组成:对象头+实例数据+对齐数据

当基本数据类型使用 == 比较时,由于变量名指向的是具体的数值,比较的是值是否相等,而应用类型使用 == 比较时,由于变量名指向的是内存地址,拿两个地址来比较,这样就造成了 == 是比较地址的错误。

3、equals方法是针对引用类型比较的,基本数据类型没有equals方法

equals方法是针对引用类型比较的,基本数据类型没有equals方法,来自于所有类的祖先Object类,判断成员变量是否相等使用equals方法,equals方法需要重写用来比较每个成员变量是否相等。

4、“重写equals方法就需要重写hashCode方法”也是错误的

既然重写了equals方法,就可以判断成员变量是否相等,为什么要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值