博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 之equals与"=="的区别
阅读量:5130 次
发布时间:2019-06-13

本文共 1329 字,大约阅读时间需要 4 分钟。

1.网上很多说法都是:==是比较内容是否一样,equals是比较是否是同一个对象。这种说法是错误的。

  注意:有一些同伴在测试这个问题的时候会用String、Integer等java自带的引用类型的变量进行测试,这时候必须记住三个要点:

  1.String、Integer、Double等java自带的引用类型对equals方法进行了重写,比较的是内容是否相等。

   例如查看Integer源码:

        

  2.String类型是final类型:

   String str1 = "abc";    String str2 = "abc";    str1和str2指向的是同一个对象。

   String str3 = new String("abc");    String str4 = new String("abc");    str3和str4指向的是两个不同的对象。

  3.Integer和String类型都有一个常量池,只不过Integer的常量池只存放-128~127之间的数。

    例子:

      

2.所以,正确的是:

  对于==来说,并不是绝对的只比较内容是否相等。有两种情况:如果是比较java的基本数据类型,则==比较的是内容是否相等;

  如果比较的是引用类型,则比较的是是否是同一个对象。

 

  对于equals来说,equals不允许拿来比较基本数据类型,只能比较引用类型,比较是否是同一个对象,除非重写了equals方法。

  但是,有一些类型是对equals方法进行了重写的,比较的是内容是否相等。例如String,Date等类型对equals方法进行了重写。

*********************************************

  验证:

  

  输出结果:

  

  解释:

  编号1:String类重写了equals方法,比较的是内容,所以输出是true.

  编号2:String是引用类型,==在这里比较的是指向的是是否是同一个对象,输出为true。所以证明str1和str2是同一个对象,为什么呢?

       在开头说了,String是final类型,是不可变对象,如果不是通过new方法来新建对象,如果两个字符串的内容是相同的,那么第二次新建字符串

       的时候,不会再重新新建一个字符串,而是引用同一个字符串。因为str2的内容和str1的内容是相同的,所以str2指向的str1的字符串,而不是新建一个字符       串。

  编号3:String类重写了equals方法,比较的是内容,所以输出是true.

  编号4:String是引用类型,==在这里比较的是指向的是是否是同一个对象。str4是通过new新建的对象,所以str3和str4指向的是不同的对象,输出false。

  编号5:str3和str4都是通过new新建的对象,所以是不同的对象,输出false。

  编号6:String类重写了equals方法,比较的是内容,所以输出是true.

转载于:https://www.cnblogs.com/Zchaowu/p/7351557.html

你可能感兴趣的文章
axis2的WebService无法注入Service层类
查看>>
作业day02
查看>>
oracle-DECODE()函数
查看>>
查看端口占用,并解除占用
查看>>
附加题
查看>>
关于performSelector调用和直接调用区别
查看>>
python-数字(int)知识整理
查看>>
读书笔记---<<图解HTTP>>(一)
查看>>
2017年3月21日
查看>>
hyphenation
查看>>
三类人最好别吃蜂蜜
查看>>
常用animation动画
查看>>
避免unicode字符被截断的方法
查看>>
获取一些系统和用户的通用属性
查看>>
什么是响应式
查看>>
JAVA过滤emoji表情包
查看>>
flex布局学习
查看>>
EasyUI中Datagrid列定位方法
查看>>
二叉树的概念和基本术语
查看>>
Django处理ajax请求
查看>>