在java中parseInt和valueOf之间的区别?

这两种方法有什么区别? 他们似乎做了完全一样的事情(也适用于parseFloat()parseDouble()parseLong()等,他们是如何不同于Long.valueOf(string)

编辑:另外,这些是哪个更好,常规使用更多?

那么, Integer.valueOf(String)的API的确确实实在在的说,这个String就像给Integer.parseInt(String) 。 然而, valueOf(String)返回一个new Integer()对象,而parseInt(String)返回一个原始的int

如果你想享受Integer.valueOf(int)的潜在的caching好处,你也可以使用这个眼神:

 Integer k = Integer.valueOf(Integer.parseInt("123")) 

现在,如果你想要的是对象而不是原语,那么使用valueOf(String)比从parseInt(String)创build一个新对象更有吸引力,因为前者在IntegerLongDouble等中是一致的。

从这个论坛 :

parseInt()返回原始整数types( int ),由此valueOf返回代表整数的对象java.lang.Integer 。 有些情况下你可能需要一个Integer对象,而不是原始types。

当然,另一个明显的区别是intValue是一个实例方法, parseInt是一个静态方法。

 Integer.valueOf(s) 

类似于

 new Integer(Integer.parseInt(s)) 

不同的是valueOf()返回一个Integer ,而parseInt()返回一个int (一个原始types)。 另外请注意, valueOf()可以返回一个caching的Integer实例,这会导致==testing的结果似乎间歇性地正确的混淆结果。 在自动装箱之前,可能会有不同的便利,在Java 1.5之后,这并不重要。

此外, Integer.parseInt(s)也可以采用原始数据types。

看看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.parseInt只能以本地types返回int。

Integer.valueOf实际上可能需要分配一个Integer对象,除非该整数恰好是预分配的对象之一。 这花费更多。

如果您只需要本机types,请使用parseInt。 如果你需要一个对象,使用valueOf。

而且,由于这种潜在的分配,自动装箱在各方面都不是好事。 它可以减慢事情。

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

你的代码和

 int abc = new Integer(123); 

parsing*变化返回基本types,valueOf版本返回对象。 我相信valueOf版本也会使用内部引用池来为给定的值返回SAME对象,而不仅仅是具有相同内部值的另一个实例。

既然valueOf返回一个新的Integer对象,为什么下面的代码是正确的?

 String base5String = "230"; int result = Integer.valueOf(base5String); 

如果你检查Integer类,你会发现valueof call parseInt方法。 调用API的价值时最大的区别就是caching。 如果值在-128到127之间,则caching。请在下面的链接中find更多信息

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

public static Integer valueOf(String s)

  1. 该参数被解释为表示一个带符号的十进制整数,就好像该参数被赋予了parseInt(java.lang.String)方法一样。
  2. 结果是一个Integer对象,它表示由string指定的整数值。

  3. 换句话说,这个方法返回的Integer对象的值等于:new Integer(Integer.parseInt(s))

  1. 在ValueOf的情况下 – >它正在创build一个Integer对象。 不是原始types,也不是静态方法。
  2. 在ParseInt.ParseFloat的情况下 – >它返回相应的原始types。 并且是一个静态的方法。

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