Java中(Integer)127 == (Integer)127和(Integer)129 == (Integer)129表达式结果差异分析
来源:互联网 发布:书画升值数据 编辑:程序博客网 时间:2024/04/30 15:09
一直觉得自己Java基础还不错,但是第一眼看到(Integer)129 == (Integer)129表达式时竟然无法立刻反映过来结果到底是true还是false,不妨先来看一下下面简单的Java程序:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
编译运行后,控制台输出结果如下:
- 1
- 2
- 3
- 4
- 5
如果平时对Java基础关注比较少,可能有两三年经验的Java程序员也没办法解释为什么会有这种差异,笔者也是在网上查了一些资料才搞清楚来龙去脉。
要弄明白这个问题,首先要熟练掌握Java自动装箱、拆箱相关的知识,Java中的自动装/拆箱发生在运算操作和比较操作时,例如:
- 1
- 2
- 3
使用==进行比较时,情况如下:
如果==两边都是装箱类型,则比较引用是否指向堆内存中的同一个对象。
如过==两边有一边是装箱类型,另外一边是基本类型,则把装箱类型拆箱为基本类型,然后进行比较。例如:
- 1
- 2
- 3
- 4
问题就在于,表达式(Integer)127 == (Integer)127和(Integer)129 == (Integer)129的值为什么不同呢?
我们不妨看一下java.lang.Integer类的源码,如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
这里只截取了一部分关键代码,如上面代码所示,Integer类只对-128~127之间的对象做了缓存,(Integer)127 == (Integer)127两边装箱后,实际指向堆内存中同一个对象,(Integer)129 == (Integer)129,装箱为引用类型后,没有做缓存,指向堆内存中不同对象,所以比较结果为false。
阅读全文
0 0
- Java中(Integer)127 == (Integer)127和(Integer)129 == (Integer)129表达式结果差异分析
- Java中(Integer)127 == (Integer)127和(Integer)129 == (Integer)129表达式结果差异分析
- 【java】Integer == Integer?
- 【java】Integer == Integer?
- Java Integer =
- Integer a= 127 与 Integer b = 127
- Integer对象和 ==、equals分析
- Integer == Integer? int "=="
- Integer.MAX_VALUE+1=Integer.MIN_VALUE
- ArrayList<Integer> arr=new ArrayList<Integer>
- java Integer == 比较
- java中int和integer比较,integer和integer比较
- Java-----int和Integer的"=="
- Java中int和Integer的==
- Integer,int,==
- Integer与==
- Integer==陷阱
- integer ==比较
- PowerMock测试 mock hbase连接
- python操作redis操作方法实例
- tablelayout的使用
- 怎么跳出MySQL的10个大坑
- RocketMQ原理解析-producer 1.启动流程
- Java中(Integer)127 == (Integer)127和(Integer)129 == (Integer)129表达式结果差异分析
- 一个简单的网络判断的方法
- 设计模式-建造者模式
- 记录 Annotation processing is not supported for module cycles.
- php读取文件内容的三种方式
- 比较2个buff里数据是否相同
- php表单提交时获取不到post数据的解决方法
- echarts设置折线拐点中心的颜色
- CentOS镜像文件下载