码迷,mamicode.com
首页 > 编程语言 > 详细

Java Core - ‘==’和‘equals’的区别

时间:2019-04-27 13:27:28      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:引用   heap   自定义   实例化   str   dem   基本类型   类型   技术   

不管是‘==’还是‘equals’,他们的比较都需要区分类型来讨论的:

‘==’

当比较的数据类型是基本类型时,比较值是否相同

当比较的数据类型是引用类型时,不仅比较值相同还比较其所在内存地址是否相同,也就是引用是否相同。

技术图片

分析:String不是一个基本类型,它和Integer一样是一个类。由于strC是我们创建并实例化了一个String对象,java虚拟机在heap(堆)里为strC重新开辟了一块空间,因此它和strA、strB的引用是不一样的,所谓引用就是该变量在堆中的起始地址。


 ‘equals’

equals的本质就是==,但一些类如String、Integer对该方法进行了重写,只进行值的比较,但是没有重写该方法的类,还是比较引用地址。如自定义的类,下图中,我在Demo1中定义了一个内部类,然后分别实例化:

 技术图片

顺便提一下,内部类虽然在宿主类中,但javac编译出来的class(字节码文件)是宿主类的字节码文件在同一目录下的:

技术图片

 

Java Core - ‘==’和‘equals’的区别

标签:引用   heap   自定义   实例化   str   dem   基本类型   类型   技术   

原文地址:https://www.cnblogs.com/2sheep2simple/p/10778329.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!