这两种方法有什么区别?他们似乎做同样的事情对我来说(也无二parseFloat()
,parseDouble()
,parseLong()
等等,他们如何不同Long.valueOf(string)
?
编辑:此外,哪些是更好的,并按惯例更常使用?
那么,API Integer.valueOf(String)
确实可以说它String
被解释为完全被解释为Integer.parseInt(String)
.但是,valueOf(String)
返回一个对象,而返回一个原语.new
Integer()
parseInt(String)
int
如果你想享受潜在的缓存优势Integer.valueOf(int)
,你也可以使用这个眼睛:
Integer k = Integer.valueOf(Integer.parseInt("123"))
现在,如果你想要的是对象,而不是原始的,然后使用valueOf(String)
可能比制作一个新的对象出更有吸引力parseInt(String)
,因为前者是始终存在跨Integer
,Long
,Double
,等.
来自这个论坛:
parseInt()
返回原始整数类型(int),valueOf
返回 java.lang.Integer,它是代表整数的对象.在某些情况下,您可能需要Integer对象而不是基本类型.当然,另一个明显的区别是intValue是一个实例方法,其中parseInt是一个静态方法.
Integer.valueOf(s)
类似于
new Integer(Integer.parseInt(s))
区别是valueOf()
返回an Integer
,并parseInt()
返回一个int
(基本类型).另请注意,valueOf()
可以返回缓存的Integer
实例,这会导致混淆的结果,其中==
测试结果似乎是间歇性正确的.在自动装箱之前,方便性可能会有所不同,在java 1.5之后它并不重要.
而且,Integer.parseInt(s)
也可以采用原始数据类型.
看看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只能将int作为本机类型返回.
Integer.valueOf实际上可能需要分配一个Integer对象,除非该整数恰好是预分配的对象之一.这需要更多费用.
如果您只需要本机类型,请使用parseInt.如果需要对象,请使用valueOf.
此外,由于这种潜在的分配,自动装箱在各方面都不是好事.它可以减慢事情.