鉴于已声明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();
是否存在每个人都是首选代码的情况? int
和Integer
似乎可以互换,并且不需要.intValue()
。
答案 0 :(得分:7)
如果您需要int
,请使用parseInt()
,如果您需要Integer
使用valueOf()
。虽然它们现在是可以互换的,但使用直接返回所需数据类型的那个仍然更有意义。 (从历史上看,它们根本不可互换,这是在Java 5中使用自动装箱和拆箱引入的。)
您使用的intValue()
方法只是将Integer
类类型转换为int
原语,因此使用它和valueOf()
是最糟糕的组合,永远不想用它。 (没有什么不好的事情会发生,阅读时间会更长,表现稍差,通常更多余。)
如果您不在乎或不知道,那么我会使用parseInt()
。特别是作为初学者,你更想要原始类型而不是类类型。
答案 1 :(得分:3)
int
和Integer
看起来可以互换:在许多情况下,你需要一个但有另一个,编译器会自动插入必要的代码转换它们。
这很有用,但如果您了解它,可以在很多地方避免使用它,这会导致代码稍微快一点(因为转换的次数较少)。
Integer.parseInt()
会返回int
,因此如果您需要int
Integer.valueOf()
会返回Integer
,因此如果您需要Integer
Integer.valueOf().intValue()
首先创建Integer
,然后从中提取int
值。没有充分的理由使用它而不是简单的Integer.parseInt()
。 int
和Integer
之间的决定也很容易做到:
int
),如果可能的话Object
(例如,如果您想将您的号码放在Collection
中),那么您需要使用包装类型(Integer
)作为原始类型不能在这里使用。答案 2 :(得分:0)
int和Integer不可互换。由于Autoboxing功能从java 5开始,int转换为整数转换由jvm本身完成。但是我们不应该不必要地使用Integer类.Primitive数据类型总是更快.Wrapper类应该是仅用于需要。