parseInt和valueOf的区别?

public class IntegerDemo4 {

public static void main(String[] args) {
    String str = "123";
    int i = Integer.parseInt(str);

// int i = Integer.valueOf(str);

//parseInt和valueOf在这里用结果都对,但区别是什么呢?谢谢大家解答一下^_^

    System.out.println(i+1);
    
    double d = Double.parseDouble(str);
    System.out.println(d+1);
    
    
}

}

阅读 18.5k
3 个回答

valueOf内部就用了parseInt,区别在于parseInt直接返回原始int类型数据;而valueOf又装了下箱,返回Integer类型。

还有一个区别,parseInt期待输入是String,而valueOf不是

感受下代码:

public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}

public static Integer valueOf(String s, int radix) throws NumberFormatException {
return Integer.valueOf(parseInt(s,radix));
}

public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
}

看源码:

//先调用parseInt获得int值,然后封装成Integer对象,注意封装的逻辑,有缓存
 public static Integer valueOf(String s) throws NumberFormatException {
        return Integer.valueOf(parseInt(s, 10));
 }
    
 public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
 if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
 }
 //直接转换,获得int值
 public static int parseInt(String s) throws NumberFormatException {
    return parseInt(s,10);
 }

综上所述,一般用Integer.parseInt(str),除非你要返回Integer类型,不然还有封装拆箱,性能多少会耗费些。

parseint直接返回int。valueof会做封装

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题