您的位置:首页 > 产品设计 > UI/UE

new Integer 、Integer.parseInt() 和 Integer.valueOf()

2018-01-09 13:30 225 查看
Integer
类有一个静态缓存,存储了256个特殊的
Integer
对象——每个对象分别对应`-128 和127之间的一个值。

有了这个概念,就可以知道上面三行代码之间的区别。

new Integer(123);


显示创建了一个新的
Integer
对象。

Integer.parseInt("123");

解析完字符串后返回一个
int
值。

Integer.valueOf("123");


这种情况比其他的要更复杂一些。首先进行了字符串解析,然后如果解析的值位于
-128
127
之间,就会从静态缓存中返回对象。如果超出了这个范围,就会调用
Integer()
方法并将解析的值作为参数传入,得到一个新的对象。

现在,让我们看一下问题中的3个表达式。

Integer.valueOf("127")==Integer.valueOf("127");


上面的表达式返回
true
,因为
Integer
的值从静态缓存中取了2次,表达式返回了对象与自己比较的结果。因为只有一个Integer对象,所以返回结果为
true


Integer.valueOf("128")==Integer.valueOf("128");


上面的表达式返回
false
,因为
128
没有存在静态缓冲区。所以每次在判断相等时等式两边都会创建新的
Integer
对象。由于两个
Integer
对象不同,所以
==
只有等式两边代表同一个对象时才会返回
true
。因此,上面的等式返回
false


Integer.parseInt("128")==Integer.valueOf("128");


上面的表达式比较的是左边的原始
int
128
与右边新创建的
Integer
对象。但是因为
int
Integer
之间比较是没有意义的,所以Java在进行比较前会将Integer自动拆箱,所以最后进行的是
int
int
值之间的比较。由于
128
和自己相等,所以返回
true


补充说明:

只适应于jdk7或以上版本,因为jdk6jdk7的Integer具体实现有差别,详情可查看下源代码.

http://www.importnew.com/9162.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: