继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

从源码探究JAVA的equals和==

POPMUISE
关注TA
已关注
手记 273
粉丝 80
获赞 423

本文脉络:先总结出三种应用场景选用equals还是==,再贴java.lang.Object类equals()方法的源码,以及重写了这个方法的派生类有哪些,以String类为例贴一个如何重写的源码。最后附上本文的参考文献和源码链接。

JAVA的equals和==的三种应用情景

  • 基本数据类型比内容用==

  • 引用数据类型比内容用equals

  • 引用数据类型比地址用==

以下做具体解释。

情景一:基本数据类型比内容用==

说明:如果想比较两个相同基本数据类型(如两个都是int类型)的变量值是否相等,则使用==运算符。对于8种基本数据类型的变量,变量直接存储的是“值”,因此在用关系操作符==来进行比较时,比较的就是 “值” 本身。注意此处不能使用equals方法,因为int是基本类型,不是对象,没有方法。

注意:要区分int和Integer,int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null。

8种基本数据类型如下。

  • 整型(四种)byte, short, int, long

  • 浮点型(两种)float, double

  • 布尔型boolean

  • 字符型char

情景二:引用数据类型比内容用equals

说明:如果涉及比较两个相同或不同引用类型(如两个都是String类型,或者一个是Integer类型另一个是String类型)的变量值是否相等,即本题情况,则使用equals方法。String、Date、Double、Integer、Long等类对Object类的equals方法进行了重写,比较的是内容。见本文末尾源代码。

情景三:引用数据类型比地址用==

前面都是想比较值是否相等,如果我们想比较引用类型的变量所指向的内存地址是否相等,则使用==运算符。
说明:==运算符如果作用于引用类型的变量,则比较的是变量所指向的对象的地址。

关于基本数据类型

源码

//java.lang.Object.equals(java.lang.Object)源码

//derived from above

//java.lang.String.equals(java.lang.Object)源码

参考文献:

1、浅谈Java中的equals和==
2、Primitive Data Types
3、Java.lang.Object.equals() Method
4、Difference between == and .equals() method in Java
5、Methods derived from: JDK / jdk / openjdk / 6-b14
java.lang.Object.equals(java.lang.Object)

6、java.lang.Object源码
7、java.lang.String源码
8、面试题:Integer和int的区别?在什么时候用Integer和什么时候用int



作者:心飞麦
链接:https://www.jianshu.com/p/0dc0ee68d814
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP