【问题标题】:Conversions of strings to Integer and to int将字符串转换为 Integer 和 int
【发布时间】:2013-01-07 00:11:17
【问题描述】:

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

【问题讨论】:

标签: java string integer


【解决方案1】:

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

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

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

【讨论】:

  • 我使用的文本将 parseInt() 和 valueOf 方法一起引入,并在文本后面引入了包装器类型。谢谢。 – 尼克
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 超级解释!我还没有到 Collections 和 wrapper 类型。我使用的文本一起介绍了 parseInt() 和 valueOf 方法,并在文本后面引入了包装器类型。谢谢。
【解决方案3】:

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

【讨论】:

  • 实际上自动装箱/拆箱是编译器的事情。 JVM 本身并不知道。
猜你喜欢
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
相关资源
最近更新 更多