如果需要原始的 int 数据类型,则使用 Integer.parseInt() 方法。

如果需要包装类对象,则使用 valueOf() 方法。

同样 Integer、Long、Double 和 Float 都是一样的道理。

原文地址:https://zhuanlan.zhihu.com/p/88231171

在 Java 的 Integer 类中,有 Integer.valueOf(String s) 和 Integer.parseInt(String s) 两个静态方法,他们都能够将字符串转换为整型,他们到底有什么区别呢?今天就来分析下。

一、源码分析

Integer.parseInt(String s)的源码:

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

Integer.valueOf(String s)的源码:

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

从源码可以看到:

Integer.parseInt(String s)将会返回int常量。

Integer.valueOf(String s)将会返回Integer类型的对象。

Integer.valueof() 和 Integer.parseInt() 的底层都用到了Integer.parseInt(String s ,int radix)这个方法,这个方法将字符串作为有符号的十进制整数进行解析,并返回一个int类型的值。

而Integer.valueOf(String s)中又调用了public static Integer valueOf(int i) ,通过下面源码可以看到当int数值在-128和127之间的时候,会直接从cache中获取一个已存在Integer对象,但是不在这个范围内的数字,则会调用new Integer(i) 创建一个新对象。

		public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

二、结论

如果需要原始的 int 数据类型,则使用 Integer.parseInt() 方法。

如果需要包装类对象,则使用 valueOf() 方法。

同样 Integer、Long、Double 和 Float 都是一样的道理。