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

     难得糊涂,努力明白

  • 相关阅读:
    mysql 基础整合大全
    django 完整日志配置
    rest_framework视图基类与五个扩展类
    Nginx + uWSGI 配置django---终极版
    小程序 textarea ios兼容解决
    小程序调取数字键盘,没有小数点解决办法
    消息框-提示框
    h5页面长按保存图片
    解决浏览器自动填充input
    angularJS(2)
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/7161905.html
Copyright © 2011-2022 走看看