Java equals和==的区别

在了解equals和==的区别之前,我们首先要明确JVM的内存分配

  在JVM中,内存分为堆内存跟栈内存。他们二者的区别是: 当我们创建一个对象(new Object)时,就会调用对象的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用。还需注意的一点,基本数据类型是存储在栈内存中,而包装类型则是引用存在栈内存中,而数据对象存在堆内存中。

然后我们来具体比较一下equals和==

== 是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同

例如:
  我们int a= 2 a是一个基本类型,那么引用a存储在栈内存中,占内存中存储的就是数字2,我们如果在定义一个int b=3,那么引用b的栈内存中存储的就是3,所以当用 “==”比较的时候直接比较的是2是否等于3
   而当我们Integer a=2,Integer b=3的时候,引用a栈内存中存储的是堆内存的一个地址,数字2在堆内存中存储,所以在我们对包装类型使用 == 的时候,实际上是比较引用a ,b指向的堆内存地址是否相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值