关于equal和==

最近面试的时候总是遇到这个问题的笔试,以前学的时候没有深究,现在是时候来总结一下了

1.基本类型和包装类

诸如

        new Integer(32)==32
        new Integer(32).equal(32)
        ...

此时==比较的就是具体的值,所以在此包装类和基本类型就没有区别,且各包装类和各基本类型可以互等,例:

new Integer(32) == 32f;
new Float(32f) ==32d;
new Double(32d) == 32;
//例子只举了3个,其他的自己触类旁通
...

再来看看equal,看了源码,发现包装类的equal都是先进行了 instanceof 判断,之后才是进行值的比较,例:

new Integer(32).equal(new Integer(32));
//instanceof通过,之后比值,为true
new Integer(32).equal(new Float(32f));
//instanceof 不通过,为flase
new Integer(32).equal(32f);
//instanceof 不通过,为flase
new Integer(32).equal(32);
//instanceof 通过,比值,为true
//至于其他的自己触类旁通,其他包装类不再举例

2.包装类和包装类

new Integer(32) .equals( new Integer(32))
//instanceof 通过,比值,为true
new Integer(32) == new Integer(32);
//这时候直接比较的就是类,类与类一般是不会==的, 为false
new Integer(32) .equals( new Float(32f))
//instanceof 不通过,为false
new Integer(32) == new Float(32f);
//这就很明显为false了

3.基本类型和基本类型

这个就很明显了,基本都成立

32==32f;
32==32d;
//其他不再举例
...

总结:

在真实值相等的情况下(32与32.0,32f…),==在类与类直接比较时总为false,毕竟内存地址不同,在基本类型都为true,equal方法需先考虑是否通过 instanceof ,之后再进行比值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值