当前位置: 首页 > news >正文

128陷阱(超详细)

        int x = 128;int y = 128;int n = 127;int m= 127;Integer d = Integer.valueOf(x);Integer g = Integer.valueOf(y);Integer z = Integer.valueOf(n);Integer v = Integer.valueOf(m);System.out.println(d == g);System.out.println(z == v);

思考一下他的结果是什么?

为什么 d == g的结果是true

z == v的结果是false?

这里的原因咱们还是需要到valueOf方法的源码里去看

这里可以清晰的看到 当传入的参数i在一定范围时 他是直接从一个名为cache的数组中取出参数在cache数组中对应元素的地址 传回去。如果超出这个范围就直接new一个新的对象将这个新对象的地址传回去。

我们点击进入cache数组的代码中可以发现,cache数组的取值范围在-128~+127之间,这也就解释了为什么两个值为127的Ingeter对象利用==进行比较返回的是true,而两个值为128的返回的是false。

这里需要注意的是如果你使用equals方法进行比较,那么他就是直接对两个对象的值进行比较,会返回true(两个对象的地址是否相同没有影响) 。

还有一点就是如果你是通过new生成的对象你对他们的值使用==进行比较他们返回的一定是false因为new是生成一个新的对象,他们不可能指向同个对象,地址也不会相同,也不会存在128陷阱。

http://www.lryc.cn/news/394652.html

相关文章:

  • STM32自己从零开始实操08:STM32主控原理图
  • Ubuntu20.04配置TurtleBot3 Waffle Pi远程控制
  • SaaS产品和独立部署型产品有什么区别,该怎么选择?
  • 【Linux】压缩命令——gzip,bzip2,xz
  • 【Java13】包
  • 从零到一:Python自动化测试的详细指南!
  • iOS中多个tableView 嵌套滚动特性探索
  • TCP/IP模型和OSI模型的区别
  • (九)绘制彩色三角形
  • 短信群发平台适用于哪些行业?
  • 1. 倍数
  • C#常用关键字举例
  • stm32——外部中断EXTI
  • Solidity:变量数据存储和作用域 storage/memory/calldata
  • ElementUI中的el-table解决宽度问题 - 根据内容自动撑开
  • react apollo hooks
  • Android 10.0 SystemUI启动流程
  • 洛谷 P1032 [NOIP2002 提高组] 字串变换
  • 网络资源模板--Android Studio 外卖点餐App
  • 【Linux】网络新手村
  • 123123
  • 在pycharm中使用jupyter
  • MongoDB:掌握核心常用命令语句,精通数据操作
  • Redis中测试Stream的例子
  • 28 H3C SecPath F1000 概览(主要功能是总 观看全局)
  • 标准版视频检测终端功能有哪些? 捷顺高清视频车位引导系统怎么样?
  • 说明本文档目录是软件开发梳理需求常见问题QA文档,方便客户看,也方便我们的售前人员,需求分析人员,ui设计师,原型绘图人员,思维导图绘图人员查看。
  • Echarts桑基图
  • wordpress网站添加一个临时维护功能
  • 充电桩开源平台,开发流程有图有工具