在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一个新对象更有吸引力,因为前者在Integer
, Long
, Double
等中是一致的。
从这个论坛 :
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)
- 该参数被解释为表示一个带符号的十进制整数,就好像该参数被赋予了parseInt(java.lang.String)方法一样。
-
结果是一个Integer对象,它表示由string指定的整数值。
-
换句话说,这个方法返回的Integer对象的值等于:new Integer(Integer.parseInt(s))
- 在ValueOf的情况下 – >它正在创build一个Integer对象。 不是原始types,也不是静态方法。
- 在ParseInt.ParseFloat的情况下 – >它返回相应的原始types。 并且是一个静态的方法。
我们应该根据我们的需要使用任何一个。 在ValueOf的情况下,因为它正在实例化一个对象。 它会消耗更多的资源,如果我们只需要一些文本的价值,那么我们应该使用parseInt,parseFloat等