zoukankan      html  css  js  c++  java
  • 讲明白 == 和 equals 的区别

    java 面试和笔试中经常会问到 == 和 equals 的区别,

    == 判断是否为同一引用

    equals 判断值相等

    是这样吗?表面上貌似没问题,但是不能只看表象,知其然要知其所以然。

    小测验:

    结果:

    这样的结果有没有想到呢?

    最近有一个小文章带着我探入根源,我也就自己验证一下,毕竟没有实践就没有发言权

    将编译后的class文件反编译了一下发现

    编译器将所有的值都进行了  valueOf()处理

    valueOf() 方法到底是什么鬼?

    由此可见,传入的参数 和 IntegerCatch.low Integer.high 进行比较,在这个区间的返回一个计算过的值,越界的就重新 new 了一个对象

    如果重新 new 了,就说明是两个对象,分别指向两个引用, == 比较肯定是 false

    由示例可以看出  100 在区间内, 1000 越界了。

    那么IntegerCatch.low 和 Integer.high 又是什么鬼?

    代码只看这么多,由此可见,IntegerCatch.low = -128 , Integer.high = 127.

    这也就是 1000 比较为 false 的真相

    那么equals 是如何对比的呢?

    由源码可以看出,equals 比较的时候,会先判断是否为同一引用,如果是则返回 true ;

    如果不是,会判断数据类型是否为String ,然后进行字符比对;字符相同返回 true;

    由此可见,相同引用内容一定相同,内容相同不一定是同一引用

    这也是 == 与 equals 的比较方式与区别。

     难得糊涂,努力明白

  • 相关阅读:
    跳跃表原理
    ThreadLocal
    Innodb中的事务隔离级别和锁的关系
    线程池拒绝策略
    vue 的 nextTick 原理
    Git 的基本操作
    JavaScript 的运行机制
    实现一个react系列三:生命周期
    实现一个react系列二:渲染组件
    实现一个react系列一:JSX和虚拟DOM
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/7161905.html
Copyright © 2011-2022 走看看