4

鉴于 Strings已被声明,以下 5 行代码产生相同的结果:

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()不是必需的。

4

3 回答 3

7

如果您需要int,请使用parseInt(),如果您需要Integer使用valueOf()。尽管它们现在(在某种程度上)可以互换,但使用直接返回所需数据类型的仍然更有意义。(从历史上看,它们根本不能互换,这是在 Java 5 中通过自动装箱和拆箱引入的。)

intValue()您使用的方法只是将Integer类类型转换为int原始类型,因此使用它valueOf()是最糟糕的组合,您永远不想使用它。(不会有坏事发生,只是阅读时间更长,性能稍差,通常更多余。)

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

于 2013-01-23T13:37:15.987 回答
3

int并且Integer通过自动装箱和自动拆箱的魔力看起来可以互换:在许多情况下,您需要一个但有另一个,编译器会自动插入必要的代码来转换它们。

这很有用,但如果你知道它,你可以在很多地方避免它,这会导致代码稍微快一些(因为要做的转换更少)。

  • Integer.parseInt()返回一个int,所以如果你需要一个,你应该使用它int
  • Integer.valueOf()返回一个Integer,所以如果你需要一个,你应该使用它Integer
  • Integer.valueOf().intValue() 首先创建一个Integer然后从中提取int值。没有充分的理由使用它来代替简单的Integer.parseInt().

和之间的决定intInteger很容易做到:

  • 如果可能的话,通常你会想要使用原始类型 ( int)
  • 如果你需要一个Object(例如,如果你想把你的号码放在 a 中Collection),那么你需要使用包装类型 ( Integer),因为这里不能使用原始类型。
于 2013-01-23T13:38:25.050 回答
0

int 和 Integer 不可互换。由于从 java 5 开始的 Autoboxing 功能,int 到 Integer 的转换由 jvm 本身负责。但是我们不应该不必要地使用 Integer 类。原始数据类型总是更快。只需要使用包装类.

于 2013-01-23T13:39:14.550 回答