java 1.6 1.7 区别_java中Integer在JDK1.6和JDK1.7中的区别

运行下面这段代码:

System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));

System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));

System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));

JDK1.6输出结果:

false

false

true

JDk1.7输出结果:

true

false

true

下面来研究一下为什么会出现这种情况。

JDk1.7中Integer源码中valueOf方法:

第一步:

103013d5369b29b13143593ad09aa941.png

第二步:

20fa244ae13690b90c8991d0ffa17c21.png

第三步:

457b5a91e8dda066093ef2a1ed8ccdf5.png

可以发现,valueOf会返回一个Integer(整型)对象,当被处理的字符串在-128和127(包含边界)之间时,返回的对象是预先缓存的。

可以得出:

第一行的调用返回true,这个整型对象127是被缓存的

第二行的调用返回false是因为128没有被缓存。

JDk1.6中Integer源码中valueOf方法:

第一步:

5fc05b8d119a474ee932c55651182528.png

第二步:

c606036957a344cb471f89e3d812002a.png

可以发现,valueOf无论大小都会返回一个new 的 新的Integer(整型)对象,所以都不一样。

可以得出:

第一行的调用返回false,返回一个新的Integer(整型)对象

第二行的调用返回false,,返回一个新的Integer(整型)对象。

第三行的方法Integer.parseInt(String),这个方法反回的int

对应的Integer源码如下:

bdc1e0cd7b8db6524a16de0c03cf3180.png

比较操作符使用了==同时等号的两边存在一个int型和一个Integer对象的引用时,Java在进行比较前会将Integer自动拆箱,所以最后进行的是int和int值之间的比较。

即:128==128,返回true。

小结:JDK1.7版本开始,Integer有了静态缓存,这点注意一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值