Java里转换字符串为整型有两种方式:
- Integer.valueOf(String str)
- Integer.parseInt(String str)
示例
String str = "100";
Integer i1 id= Integer.valueOf(str);
int x2 = Integer.parseInt(str);
从方法的签名看,两者不同的地方是它们返回的类型不一样。valueOf返回的是包装类型Integer,而parseInt返回的基本类型int。
查看valueOf的实现:
public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
}
valueOf实质是调用parseInt,然后再调用Integer.valueOf(int i);
进入Integer.valueOf(int i)
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
其中 IntegerCache.low = -128,IntegerCache.high=127。当i值在-128到127的范围返回的是缓存在IntegerCache里的对象,超出范围返回新的整型。
所以使用Integer.valueOf返回的Integer型数据,建议不要直接做相等比较
System.out.println(Integer.valueOf(20) == Integer.valueOf(20)); //true
System.out.println(Integer.valueOf(200) == Integer.valueOf(200)); //false
总结
Integer.valueOf(str) 等同于new Integer(Integer.parseInt(str))。