Java中Integer包装类之间的比较问题
Integer 是Java中的包装类,通常情况下,两个相同值的Integer对象实例用 “==” 运算符进行比较时,返回结果应该是false,但是实际情况却不是这样。
public static void main(String[] agrs){Integer integer1 = 1;Integer integer2 = 1;System.out.println(integer1==integer2);}
复制代码
运行结果:
这是为什么?
但是稍微改动一下情况就会不同:
public static void main(String[] agrs){Integer integer1 = 128;Integer integer2 = 128;System.out.println(integer1==integer2);}
复制代码
运行结果:
可以注意到,这两段程序的不同之处仅仅在integer的值上,一个的值是 1 ,另外一个是 128,比较起来的结果完全不同。
这是为什么?
单步调试看一下:
当赋值128时:
Integer = 128 赋值操作得时候跳到了valueOf函数:
在这个if语句中 low和high的值分别是-128和127,所以最后返回给integer1的时候返回的就是一个新的Integer对象实例,在堆中开辟了新的空间,所以 “==” 的结果理所当然是false,也就是预期结果。
当赋值1时:
Integer = 1 赋值操作得时候也跳到了valueOf函数:
那么这个时候由于1在-128到127之间,所以返回的是 IntegerCache.cache 数组里的对象,从源码中可以看到,cache数组的定义如下:
而这段代码是存在于静态代码块里的:
也就是说:在Integer类被加载之后,cache数组就被初始化成了一个储存了-128~127的顺序的Integer数组,按照上面的代码逻辑,所有用 “=” 赋值的操作,如果值在-128~127之间,实际上指向的都是同一个位置。所以 “==” 的返回值是true
转载于:https://juejin.im/post/5c7fc8166fb9a049eb3cb402
Java中Integer包装类之间的比较问题相关推荐
- Java中关于包装类的练习题
Java中关于包装类的练习题 ps:三元运算符.==运算符.Vector的运用等 练习题1: 代码: package OverBaoZhuangLei;import org.junit.Test;pu ...
- Java中的包装类缓存
Java中的包装类缓存 最近在网上看到一个有意思的笔试题目,题目是考察Integer类的valueOf(String s),题目如下: 以下四行代码输出的结果依次是什么? System.out.pri ...
- 深入浅出 Java 中的包装类
转载自 深入浅出 Java 中的包装类 前阵子,我们分享了<Java中的基本数据类型转换>这篇文章,对许多粉丝还是有带来帮助的,今天讲一下 Java 包装类的的由来,及自动装箱.拆箱的 ...
- java 中 Integer 比较 问题
对于 java 中 Integer 类型 比较 ,经常在面试中被提到 ,有时 还真的 让人 头疼.下面我来分析下.integer 比较问题. 解决 Integer 值比较问题.我想从以下几点说起 ...
- JAVA中Integer的==和equals
JAVA中Integer的==和equals注意 "equals"比较 equals(Object obj)方法,在equals(Object obj)方法中,会先判断参数中的对象 ...
- java中integer的范围_java中integer取值范围是什么
java中integer取值范围是什么 发布时间:2020-08-27 10:01:14 来源:亿速云 阅读:69 作者:小新 这篇文章给大家分享的是有关java中integer取值范围是什么的内容. ...
- Java 中 Integer 源码学习之缓存池了解
Java 中 Integer 源码学习之缓存池了解 面试题 new Integer(123) 与 Integer.valueOf(123) 的区别? new Integer(123) 每次都会新建一个 ...
- java中Integer的最大最小值
java中Integer是有最大值和最小值的 最大值为Integer.MAX_VALUE = 2147483647 最小值为Integer.MIN_VALUE = -2147483648 注意:两个值 ...
- java中integer取值范围,Java中的Integer取值范围(-2^32 ~ 2^31 - 1)分析
在Java中Integer的最小值(MIN_VALUE).最大值(MAX_VALUE)定义如下: /** * A constant holding the minimum value an {@cod ...
最新文章
- 补充 宝玉 之《URL欺骗之以假乱真!》之 POST 方法提交数据 之 处理!
- Python 实现冒泡
- Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
- 《数字图像处理》冈萨雷斯学习笔记3:频域处理
- 百度App Objective-C/Swift 组件化混编之路(一)
- German Companies
- idea分支如何刷新显示最新
- mac终端配置Android ADB命令
- [论文阅读] BCNet: Bidirectional collaboration network for edge-guided salient object detection
- oracle联合运算,Oracle UNION运算符
- python和r语言生物信息学_R语言和Python哪个适合生物信息学?
- wamp5环境配置基础教程
- 勇闯迷塔小游戏(c++) 3.17更新
- 掌门教育秉持因材施教原则,打造个性化教学模式
- Chome浏览器播放语音、视频无声音的解决办法
- OCI动态链接ORACLE
- HTTP Header中的内容(请求Header、响应Header)
- 网络表示学习Network Representation Learning/Embedding
- 【Java】Java获取昨天日期的正确姿势
- 用imu_tk和imu_utils标定imu
热门文章
- 腾讯云智能制造首次披露三大战略布局,发布“511”生态伙伴计划
- 28 岁退休程序员自述:不是富二代,行政专业出身,非典型程序员
- JS 中如何判断 undefined 和 null
- 关于Java“回调”的详细理解及使用
- 由浅入深CIL系列:6.For和Foreach的CIL结构组成以及运行效率
- NeHe OpenGL教程 第四十课:绳子的模拟
- python-copy模块使用
- effectivec++条款18,让接口容易被正确使用,不宜被吴勇
- 聊聊 iOS 中的网络加密
- IntelliJ 创建main函数快捷