基础篇-JAVA-equlas比较和==比较

equlas比较和==比较

在实际编码中我们经常要使用比较,很多同学可能不清楚  "==" 和 equals() 比较有什么差别。好,废话不多说,下面来谈谈自己的理解:

  "==" 对比   情况分两种,对象对比、基本数据类型对比

    1.两个对象比较,使用 "==" 进行比较的时候,比较的是对象的内存栈地址(hashcode),不是比较对象存放在堆内存中的值,例如 String s1 = "abc", s2 = "abc";  Syetem.out.print(s1 = s2);

这时候返回的值是false;因为使用new关键字创建出来的对象,是存放在不同的内存地址。比较的是s1和s2的内存地址如下图



    2.两个基本数据类型的比较,八大数据类型:char/byte/short/int/long/float/double 比较,就是对比变量的值,例如,



使用equals()方法比较,这里看你使用的是Object类里的equals()还是String类里的equals(),因为这个方法来自Object类,这里贴Object类的equals()图:

可以看到,比较的是两个对象的内存地址是否相等



这是String类里的equals()的代码,比较的是字符串里每个字符是否相等:




可以看的出来,比较的方式不一样,请看测试情况:


总结来说:

  1)对于==,如果是用于基本数据类型的变量的比较,是比较“值”是否相等;

    如果比较对象,则比较是栈内存地址

  2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

    如果没有对equals方法进行重写,也就是使用Object类里的equals方法,则比较的是对象的内存地址;

    若String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值