parseInt()如何不同于valueOf() ?

它们似乎对我做了完全相同的事情(也适用于parseFloat(), parseDouble(), parseLong()等,它们与Long.valueOf(字符串)有什么不同?

另外,按照惯例,哪一个更可取,更常用呢?


当前回答

整数。parseInt可以只返回int作为本机类型。

整数。valueOf实际上可能需要分配一个Integer对象,除非该整数恰好是预分配的整数之一。这样成本更高。

如果你只需要本地类型,使用parseInt。如果你需要一个对象,使用valueOf。

此外,由于这种潜在的分配,自动装箱实际上在各方面都不是一件好事。它可以使事情变慢。

其他回答

查看Java源代码:valueOf使用parseInt:

/**
 * Parses the specified string as a signed decimal integer value.
 *
 * @param string
 *            the string representation of an integer value.
 * @return an {@code Integer} instance containing the integer value
 *         represented by {@code string}.
 * @throws NumberFormatException
 *             if {@code string} cannot be parsed as an integer value.
 * @see #parseInt(String)
 */
public static Integer valueOf(String string) throws NumberFormatException {
    return valueOf(parseInt(string));
}

parseInt返回int(不是整数)

/**
 * Parses the specified string as a signed decimal integer value. The ASCII
 * character \u002d ('-') is recognized as the minus sign.
 *
 * @param string
 *            the string representation of an integer value.
 * @return the primitive integer value represented by {@code string}.
 * @throws NumberFormatException
 *             if {@code string} cannot be parsed as an integer value.
 */
public static int parseInt(String string) throws NumberFormatException {
    return parseInt(string, 10);
}

如果你检查Integer类,你会发现valueof调用parseInt方法。最大的区别是当你调用valueof API时缓存。如果值在-128到127之间,它会缓存。更多信息请参见下面的链接

http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

因为您可能正在使用jdk1.5+,它会自动转换为int。所以在你的代码中,它首先返回Integer,然后自动转换为int。

你的代码和

int abc = new Integer(123);

对于ValueOf ->,它正在创建一个Integer对象。不是基元类型,也不是静态方法。 在ParseInt的情况下。ParseFloat ->返回各自的基本类型。And是一个静态方法。

我们可以根据需要使用任何一种。对于ValueOf,因为它正在实例化一个对象。如果我们只需要一些文本的值,它会消耗更多的资源,那么我们应该使用parseInt,parseFloat等。

整数。parseInt可以只返回int作为本机类型。

整数。valueOf实际上可能需要分配一个Integer对象,除非该整数恰好是预分配的整数之一。这样成本更高。

如果你只需要本地类型,使用parseInt。如果你需要一个对象,使用valueOf。

此外,由于这种潜在的分配,自动装箱实际上在各方面都不是一件好事。它可以使事情变慢。