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

Integer.parseInt("") Integer.valueOf("")和new Integer("")之间的区别

2018-03-08 10:07 489 查看
把一个String转换成int有
Integer.parseInt("")
、 
Integer.valueOf("")
new Integer("")
这么几种方式,它们之间有什么区别呢?我们可以分别看一下它们的源码
//Integer.parseInt("")
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
//Integer.valueOf("")
public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
}
//new Integer("")
public Integer(String s) throws NumberFormatException {
this.value = parseInt(s, 10);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
从源码中可以看出,
Integer.valueOf("")
Integer.parseInt("")
内部实现是一样的,它们之间唯一的区别就是Integer.valueOf(“”)返回的是一个Integer对象,而Integer.parseInt(“”)返回的是一个基本类型的int。我们再看
Integer.valueOf("")
new Integer("")
,它们同样返回的是一个Integer对象,但它们又有什么区别呢?我们再进入
Integer.valueOf(parseInt(s, 10) )
方法内部:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
1
2
3
4
5
6
我们可以看到,
Integer.valueOf("")
会用到
IntegerCache
对象,当
IntegerCache
中存在时就从cache中取,不存在时才会调用
new Integer(i)
构造函数返回一个Integer对象。所以
Integer.valueOf("")
会用到cache,其效率可能会比用构造函数
new Integer(i)
高。关于
IntegerCache
,在-127~128之间的值都会被cache,所以当我们要的值位于这个区间时返回的都是同一个实例,例如:
System.out.println(Integer.valueOf(5) == Integer.valueOf(5));
System.out.println(Integer.valueOf(500) == Integer.valueOf(500));
1
2
3
上面程序的运行结果是:
false //会用到缓存
true  //不会用到缓存
1
2
3
综上所述:当我们需要的是一个基本类型* int *的时候我们需要使用
Integer.parseInt()
函数

当我们需要的是一个Integer对象类的时候我们就是用
Integer.valueOf()
函数

转载来自:http://blog.csdn.net/suifeng3051/article/details/52101411
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: