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 的比较方式与区别。

     难得糊涂,努力明白

  • 相关阅读:
    BZOJ 1854 [Scoi2010]游戏
    【模板】二分图匹配-匈牙利算法
    BZOJ 1432 [ZJOI2009]Function
    BZOJ 1192 [HNOI2006]鬼谷子的钱袋
    BZOJ 1088 [SCOI2005]扫雷Mine
    BZOJ 1047 [HAOI2007]理想的正方形
    BZOJ 1034 [ZJOI2008]泡泡堂BNB
    BZOJ 1022 [SHOI2008]小约翰的游戏John
    LOJ 6278 数列分块入门2
    【BZOJ 1003】[ZJOI2006]物流运输(Dijkstra+DP)
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/7161905.html
Copyright © 2011-2022 走看看