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

‘==’

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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

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

Java Core - ‘==’和‘equals’的区别 随笔 第1张

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

 ‘equals’

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

 Java Core - ‘==’和‘equals’的区别 随笔 第2张

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

Java Core - ‘==’和‘equals’的区别 随笔 第3张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄