java中==和equals的区别

一:在搞明白==和equals之前我们要搞明白一件事情,就是java中内存分类?

  java中内存可以简单的分类为栈内存和堆内存(ps:笔主只是简单的分类,便于笔主这种入门级程序员理解,如果想细分jvm内存可以查阅相关资料)

  栈内存:存放基本数据类型和引用变量,类似这种 int a = 1; String str = "aa";这种你创建的变量只涉及栈内存的空间,不会涉及堆内存。

  堆内存:存放对象,类似这种 Person  p = new Person(); 这种你创建的对象涉及两块内存,栈内存存放person实例的首地址,堆内存存放真正的对象内容

二:然后我们在来看==和equals

  ==比较栈内存的内容,所以比较基本数据类型和字符串我们都用它

  equals比较堆内存存放的内容,因为对象涉及两块内存,我们平时项目中都是比较对象的每一个属性是否相等,如果一样我们就认为它相等,而equals就是比较堆内存的,所以我们比较对象用equals

三:equals的延伸

  笔主看过equals方法的源码,定义在Object对象中,如下

看到没有是“==“,也就说jdk带的equals方法只适合比较基本数据类型和字符串

当我们比较对象的时候必须重写Object的equals,既然重写的equals方法,那么hashCode()方法很有必要重写(具体为什么,我之前看过一个博文说重写了equals方法就必须重写hashCode()方法,有兴趣的朋友可以研究下,评论给我。)

    

  

posted @   我要去巴萨  阅读(2337)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示