== 和 equals的区别

对于基本数据类型:

 

 

如int,double, float......等。 ==比较的都是

 

 

对于String类型普遍大家有容易混淆的地方。

首先看一下实例代码:

 

在比较String类型的等式中,== 和 equals返回的结果都是true。其内部原理如下:

       在java中比较String类型时用==来判断的话比较的是字面值。因为String类型在没有用new()关键字的情况下如果字面值相同则指向同一个内存地址原则上==在比较引用类型时比较的是引用类型的地址,因为String的特殊性,因此虽然声明了两个String类型的对象,但实际上确实两个对象地址相同,因此返回的是 true

用以下的例子便可更加清晰明朗:

      在我重新生成一个String对象时(即用了new关键字声明新的String类型对象)。此时内存会开辟一个新的空间,将new出来的对象存在堆内存中,这个时候两个对象的引用地址指向了两个不同的内容,因此再一次用==比较二者的时候返回值为 false

内存图如下:

---------------------------------equals-----------------------------------------------------------------------------

在Java定义中,equals默认比较的是引用数据类型的地址。然而在测试equals时问题出现了,a,b相等是因为二者指向同一内存地址可以理解。但是 a c明明是两个不同的对象,指向不同的地址,为什么结果还是返回了true?

 原来String类底层重写了equals方法,使得原本比较地址的功能转换成了比较值的功能。因此当a c定义的字面值相同时,即使不是同一个对象,返回的也是true

     而在实际开发中,针对不同的业务,在判断两个对象是否被认定为同一个事物的时候,我们同样也可重写equals和hashcode方法:

       

在eclipse中,使用ALT+SHIFT+S快捷键中找到选择根据对应的属性作为判断事物的唯一特征,便可实现类似String中equals用来比较值的方案。另补充:除String外,包装器类型(Integer..等),Date等底层都是重写了hashcode和equals方法,因此道理同String相同不一一赘述。

初学java,日常总结,如有异议,欢迎指正。

2020/9/10记于公司,祝所有老师们节日快乐。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值