java==和equals的区别_java 之equals与"=="的区别

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

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

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

例如查看Integer源码:

4b1eb876a7316f7407fdcb581e3068d5.png

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之间的数。

例子:

df5b15b9c1245d7e7b5576f24869460e.png

2.所以,正确的是:

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

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

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

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

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

验证:

75b24747d38375931d5bae2eb3017832.png

输出结果:

dd7a7ac939a16243f231583c27672135.png

解释:

编号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.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值