Java 中 parseInt() 和 valueOf() 之间的区别?
parseInt()
与 valueOf()
有何不同?
他们似乎对我做了完全相同的事情(也适用于 parseFloat()
、parseDouble()
、parseLong()
等,它们与 Long.valueOf(string) 不同?
另外,按照惯例,其中哪一个更可取并且更常用?
How is parseInt()
different from valueOf()
?
They appear to do exactly the same thing to me (also goes for parseFloat()
, parseDouble()
, parseLong()
etc, how are they different from Long.valueOf(string)
?
Also, which one of these is preferable and used more often by convention?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
parse* 变体返回原始类型,valueOf 版本返回对象。 我相信 valueOf 版本还将使用内部引用池来返回给定值的相同对象,而不仅仅是具有相同内部值的另一个实例。
The parse* variations return primitive types and the valueOf versions return Objects. I believe the valueOf versions will also use an internal reference pool to return the SAME object for a given value, not just another instance with the same internal value.
如果你检查 Integer 类,你会发现 valueof 调用了 parseInt 方法。 最大的区别是调用 valueof API 时的缓存。 如果值在 -128 到 127 之间,则进行缓存 请在下面的链接中找到更多信息
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
If you check the Integer class you will find that valueof call parseInt method. The big difference is caching when you call valueof API . It cache if the value is between -128 to 127 Please find below the link for more information
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
因为你可能使用的是jdk1.5+并且它会自动转换为int。 因此,在您的代码中,它首先返回 Integer,然后自动转换为 int。
你的代码是一样的
Because you might be using jdk1.5+ and there it is auto converting to int. So in your code its first returning Integer and then auto converted to int.
your code is same as
public static Integer valueOf(String s)
结果是一个 Integer 对象,表示由字符串指定的整数值。
换句话说,此方法返回一个 Integer 对象,其值等于:
new Integer(Integer.parseInt(s))
public static Integer valueOf(String s)
The result is an Integer object that represents the integer value specified by the string.
In other words, this method returns an Integer object equal to the value of:
new Integer(Integer.parseInt(s))
我们应该根据需要使用任何一种。 对于 ValueOf 来说,它正在实例化一个对象。 如果我们只需要一些文本的值,它会消耗更多的资源,那么我们应该使用parseInt,parseFloat等。
We should use any one depending upon our need. In case of ValueOf as it is instantiating an object. it will consume more resources if we only need value of some text then we should use parseInt,parseFloat etc.
好吧,
Integer.valueOf(String)
确实表示String
的解释完全就像它被赋予Integer.parseInt(String)
< /a>. 但是,valueOf(String)
返回一个new
Integer()
对象,而parseInt(String)< /code> 返回一个原始的
int
。如果您想享受
Integer.valueOf(int)
,你也可以使用这个碍眼的东西:现在,如果你想要的是对象而不是基元,那么使用
valueOf(String)
可能比用parseInt(String)
创建新对象更有吸引力,因为前者始终存在于Integer
、Long
中、双
等。Well, the API for
Integer.valueOf(String)
does indeed say that theString
is interpreted exactly as if it were given toInteger.parseInt(String)
. However,valueOf(String)
returns anew
Integer()
object whereasparseInt(String)
returns a primitiveint
.If you want to enjoy the potential caching benefits of
Integer.valueOf(int)
, you could also use this eyesore:Now, if what you want is the object and not the primitive, then using
valueOf(String)
may be more attractive than making a new object out ofparseInt(String)
because the former is consistently present acrossInteger
,Long
,Double
, etc.来自此论坛:
From this forum:
与
valueOf()
类似,区别是
valueOf()
返回一个Integer
,而parseInt()
返回一个int
(a原始类型)。 另请注意,valueOf()
可以返回缓存的Integer
实例,这可能会导致令人困惑的结果,其中==
测试的结果似乎间歇性正确。 在自动装箱之前,便利性可能会有所不同,在java 1.5之后这并不重要。此外,
Integer.parseInt(s)
也可以采用原始数据类型。is similar to
The difference is
valueOf()
returns anInteger
, andparseInt()
returns anint
(a primitive type). Also note thatvalueOf()
can return a cachedInteger
instance, which can cause confusing results where the result of==
tests seem intermittently correct. Before autoboxing there could be a difference in convenience, after java 1.5 it doesn't really matter.Moreover,
Integer.parseInt(s)
can take primitive datatype as well.查看 Java 源代码:
valueOf
使用parseInt
:parseInt
返回int
(不是Integer
>)Look at Java sources:
valueOf
is usingparseInt
:parseInt
returnsint
(notInteger
)Integer.parseInt 只能返回 int 作为本机类型。
Integer.valueOf 实际上可能需要分配一个 Integer 对象,除非该整数恰好是预分配的整数之一。 这成本更高。
如果您只需要本机类型,请使用 parseInt。 如果您需要一个对象,请使用 valueOf。
此外,由于这种潜在的分配,自动装箱实际上在各方面都不是一件好事。 它可以减慢速度。
Integer.parseInt can just return int as native type.
Integer.valueOf may actually need to allocate an Integer object, unless that integer happens to be one of the preallocated ones. This costs more.
If you need just native type, use parseInt. If you need an object, use valueOf.
Also, because of this potential allocation, autoboxing isn't actually good thing in every way. It can slow down things.
Integer.parseInt 仅接受 String 并返回原始整数类型 (int)。
Iteger.valueOf 接受 int 和 String。
如果 value 是 String,则 valueOf 使用 parseInt 将其转换为简单 int,如果输入小于 -128 或大于 127,则返回新的 Integer。
如果输入在范围 (-128 - 127) 内,它总是从内部 IntegerCache 返回 Integer 对象。 Integer 类维护一个内部静态 IntegerCache 类,该类充当缓存并保存从 -128 到 127 的整数对象,这就是为什么当我们尝试获取 127 的整数对象(例如)时,我们总是得到相同的对象。
Iteger.valueOf(200)
将给出 200 的新 Integer。就像new Integer(200)
Iteger.valueOf(127)
与Integer = 127
相同;如果您不想将字符串转换为整数,请使用
Iteger.valueOf
。如果您不想将 String 转换为简单 int,请使用 Integer.parseInt。 它工作得更快。
比较 Integer.valueOf(127) == Integer.valueOf(127) 返回 true
因为它从缓存中获取具有相同引用的 Integer 对象。
但是 Integer.valueOf(128) == Integer.valueOf(128) 为 false,因为 128 超出了 IntegerCache 范围,并且它返回 new Integer,因此对象将具有不同的引用。
Integer.parseInt accept only String and return primitive integer type (int).
Iteger.valueOf accept int and String.
If value is String, valueOf convert it to the the simple int using parseInt and return new Integer if input is less than -128 or greater than 127.
If input is in range (-128 - 127) it always return the Integer objects from an internal IntegerCache. Integer class maintains an inner static IntegerCache class which acts as the cache and holds integer objects from -128 to 127 and that’s why when we try to get integer object for 127 (for example) we always get the same object.
Iteger.valueOf(200)
will give new Integer from 200. It's likenew Integer(200)
Iteger.valueOf(127)
is the same asInteger = 127
;If you wont to convert String to the Integer use
Iteger.valueOf
.If you wont to convert String to the simple int use
Integer.parseInt
. It works faster.And comparing Integer.valueOf(127) == Integer.valueOf(127) return true
Because it takes the Integer objects with the same references from the cache.
But Integer.valueOf(128) == Integer.valueOf(128) is false, because 128 is out of IntegerCache range and it return new Integer, so objects will have different references.