当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《java中的parseInt和valueOf之间的区别?》经验,为你挑选了5个好方法。

这两种方法有什么区别?他们似乎做同样的事情对我来说(也无二parseFloat(),parseDouble(),parseLong()等等,他们如何不同Long.valueOf(string)

编辑:此外,哪些是更好的,并按惯例更常使用?



1> Zach Scriven..:

那么,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,等.


`Integer.valueOf(Integer.parseInt("123"))`除了浪费周期和程序的大小之外,对`Integer.valueOf("123")`或`Integer.valueOf(123)`没有任何好处.
`Integer.valueOf(String)` does exactly the same caching as `Integer.valueOf(int)`. In fact, it is implemented as `Integer.valueOf(Integer.parseInt(…))` …
有一个区别 - valueOf分配的新Object(可能)带有开销(对象,处理,GC的内存),而plain int非常"轻量级".(对于最常见的值,您将获得对预先存在的对象的引用,这有点帮助.)
@Khez它不可能返回一个原始的`int`.签名表示它返回一个"整数",这就是它的作用.当它回复一个'new'`Integer`时,这个答案也是部分错误的.这不是它在Javadoc中所说的.它可以自由返回一个缓存的`Integer`.
这两种方法之间是否存在性能或内存差异?
*"valueOf(String)`返回一个`new Integer()`对象"* - 不完全.至少在Java 8中的`Integer`类实现中,缓存了值为-128到127之间的Integer`s.`Integer.valueOf("42")== Integer.valueOf("42")`返回`true`.

2> Michael Hare..:

来自这个论坛:

parseInt()返回原始整数类型(int),valueOf返回 java.lang.Integer,它是代表整数的对象.在某些情况下,您可能需要Integer对象而不是基本类型.

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


值得一提的是:valueOf版本还将使用内部引用池来返回给定值的SAME对象,而不仅仅是具有相同内部值的另一个实例.这意味着给定两个以这种方式返回的Longs,a.equals(b)== true和a == b为真

3> Joao da Silv..:
Integer.valueOf(s)

类似于

new Integer(Integer.parseInt(s))

区别是valueOf()返回an Integer,并parseInt()返回一个int(基本类型).另请注意,valueOf()可以返回缓存的Integer实例,这会导致混淆的结果,其中==测试结果似乎是间歇性正确的.在自动装箱之前,方便性可能会有所不同,在java 1.5之后它并不重要.

而且,Integer.parseInt(s)也可以采用原始数据类型.


valueOf()可以为具有相同参数的连续调用返回相同的对象(并且对于-128和127之间的参数需要).new Integer()将始终创建一个新对象.
如果需要int,请使用parseInt(),如果需要Integer,请使用valueOf()

4> Paul Verest..:

看看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);
}



5> iny..:

Integer.parseInt只能将int作为本机类型返回.

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

如果您只需要本机类型,请使用parseInt.如果需要对象,请使用valueOf.

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

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有