将字符串转换为Integer和int

时间:2013-01-23 13:34:05

标签: java string integer

鉴于已声明String s,以下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()

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)

通过自动装箱和自动拆箱的魔力使

intInteger看起来可以互换:在许多情况下,你需要一个但有另一个,编译器会自动插入必要的代码转换它们。

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

  • Integer.parseInt()会返回int,因此如果您需要int
  • ,则应该使用它
  • Integer.valueOf()会返回Integer,因此如果您需要Integer
  • ,则应该使用它
  • Integer.valueOf().intValue() 首先创建Integer然后从中提取int值。没有充分的理由使用它而不是简单的Integer.parseInt()

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

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

答案 2 :(得分:0)

int和Integer不可互换。由于Autoboxing功能从java 5开始,int转换为整数转换由jvm本身完成。但是我们不应该不必要地使用Integer类.Primitive数据类型总是更快.Wrapper类应该是仅用于需要。