2013-01-23 75 views
4

鉴于字符串s已宣布,以下5行代码产生同样的结果:转换和为int

int i = Integer.valueOf(s); 
int y = Integer.parseInt(s); 
int j = Integer.valueOf(s).intValue(); 
Integer x = Integer.valueOf(s); 
Integer k = Integer.valueOf(s).intValue(); 

是否有情况,其中每个人都成为首选的代码?看起来intInteger是可以互换的,并且.intValue()是不需要的。

+2

相关:http://stackoverflow.com/questions/13933287/which-one-is-faster-integer-valueofstring-string-or-integer-parseintstring-s – assylias

+0

你打算如何使用分配后的变量?你可能不需要Integer – Dan

+3

'Integer z = Integer.parseInt(s);'也可以。 – assylias

回答

7

如果您需要int,使用parseInt(),如果你需要使用IntegervalueOf()。尽管它们现在可以互换,但使用直接返回所需数据类型的方法仍然更合理。 (从历史上看,他们是不可替换的所有,这与自动装箱引入并在Java 5中拆箱)

intValue()方法您所使用的只是Integer类类型转换为int原始,因此使用该和valueOf()是最糟糕的可能组合,你永远不想使用它。 (没有什么不好的事情发生,只是阅读时间更长,表现稍差,而且通常更加多余。)

如果你不在乎或不知道,那么我会用parseInt()。特别是作为初学者,你更想要的是原始类型而不是类类型。

+0

我正在使用的文本将parseInt()和valueOf方法一起引入,并在文本后面介绍包装器类型。谢谢。 - 尼克 – Nick

3

intInteger被看作是可以通过自动装箱和自动拆箱的魔术互换的:在很多情况下,如果你需要一个但有另一个,编译器将自动插入必要的代码来转换它们。

这很有用,但如果您了解它,可以在许多地方避免它,从而导致代码稍微快一些(因为转换的次数少)。

  • Integer.parseInt()返回int,因此如果您需要一个int
  • Integer.valueOf()返回Integer应该使用它,所以如果你需要一个Integer
  • Integer.valueOf().intValue()第一创建你应该使用它的Integer然后从中提取int的值。没有很好的理由使用这个,而不是简单的Integer.parseInt()

intInteger之间的决定是很容易做的一样好:

  • 一般你想使用基本类型(int),如果可能的话
  • ,如果您需要Object(例如,如果你想把你的号码放在Collection),那么你需要使用包装类型(Integer),因为在这里不能使用原始类型。
+0

SUPER解释!我还没有收藏和包装类型。我正在使用的文本将parseInt()和valueOf方法一起引入,并在文本后面介绍包装器类型。谢谢。 – Nick

0

int和整数并不自动装箱功能弗朗了Java 5 JVM起,INT到整数的转换是照顾itself.But我们不应该使用Integer类的不必要interchangeable.Because。原始数据类型总是更快。应只使用包装类。

+1

其实autoboxing/unboxing是一个编译器的东西。 JVM本身不知道它。 –

+0

我的意思是编译器实际上..无论如何谢谢约阿希姆绍尔先生 – Renjith