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’的区别的主要内容,如果未能解决你的问题,请参考以下文章
Java里的equals和==的区别是否equals是比较内容,==是比较地址的?
提问一个java的问题:是有关equals()和==的,问题如下