parseInt()如何不同于valueOf() ?
它们似乎对我做了完全相同的事情(也适用于parseFloat(), parseDouble(), parseLong()等,它们与Long.valueOf(字符串)有什么不同?
另外,按照惯例,哪一个更可取,更常用呢?
parseInt()如何不同于valueOf() ?
它们似乎对我做了完全相同的事情(也适用于parseFloat(), parseDouble(), parseLong()等,它们与Long.valueOf(字符串)有什么不同?
另外,按照惯例,哪一个更可取,更常用呢?
当前回答
好吧,Integer.valueOf(String)的API确实说过,String的解释就像给Integer.parseInt(String)一样。然而,valueOf(String)返回一个新的Integer()对象,而parseInt(String)返回一个原语int。
如果你想享受Integer.valueOf(int)的潜在缓存优势,你也可以使用这个讨厌的东西:
Integer k = Integer.valueOf(Integer.parseInt("123"))
现在,如果你想要的是对象而不是原语,那么使用valueOf(String)可能比用parseInt(String)创建一个新对象更有吸引力,因为前者在Integer, Long, Double等中始终存在。
其他回答
因为您可能正在使用jdk1.5+,它会自动转换为int。所以在你的代码中,它首先返回Integer,然后自动转换为int。
你的代码和
int abc = new Integer(123);
整数。parseInt可以只返回int作为本机类型。
整数。valueOf实际上可能需要分配一个Integer对象,除非该整数恰好是预分配的整数之一。这样成本更高。
如果你只需要本地类型,使用parseInt。如果你需要一个对象,使用valueOf。
此外,由于这种潜在的分配,自动装箱实际上在各方面都不是一件好事。它可以使事情变慢。
对于ValueOf ->,它正在创建一个Integer对象。不是基元类型,也不是静态方法。 在ParseInt的情况下。ParseFloat ->返回各自的基本类型。And是一个静态方法。
我们可以根据需要使用任何一种。对于ValueOf,因为它正在实例化一个对象。如果我们只需要一些文本的值,它会消耗更多的资源,那么我们应该使用parseInt,parseFloat等。
好吧,Integer.valueOf(String)的API确实说过,String的解释就像给Integer.parseInt(String)一样。然而,valueOf(String)返回一个新的Integer()对象,而parseInt(String)返回一个原语int。
如果你想享受Integer.valueOf(int)的潜在缓存优势,你也可以使用这个讨厌的东西:
Integer k = Integer.valueOf(Integer.parseInt("123"))
现在,如果你想要的是对象而不是原语,那么使用valueOf(String)可能比用parseInt(String)创建一个新对象更有吸引力,因为前者在Integer, Long, Double等中始终存在。
parse*变体返回基本类型,valueOf版本返回对象。我相信valueOf版本还将使用内部引用池为给定值返回SAME对象,而不仅仅是具有相同内部值的另一个实例。