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

Posted 2sheep2simple

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Core - ‘==’和‘equals’的区别相关的知识,希望对你有一定的参考价值。

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

‘==’

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

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

技术图片

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


 ‘equals’

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

 技术图片

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

技术图片

 

以上是关于Java Core - ‘==’和‘equals’的区别的主要内容,如果未能解决你的问题,请参考以下文章

Core Java 经典笔试题总结(关键字,特性问题)

Java里的equals和==的区别是否equals是比较内容,==是比较地址的?

Java中关于equals()和hashCode()的问题

提问一个java的问题:是有关equals()和==的,问题如下

java 集合中重写hashCode方法和重写equals方法啥关系?

JAVA中的equals()