4

在 java 中为了比较 if 语句,我写了

if (x == 1)

并在代码审查中获得了使用 NumberUtils.INTEGER_ONE 而不是 1 的评论。我想知道它实际上为代码添加了什么好处。

4

1 回答 1

5

NumberUtils.INTEGER_ONE可能来自commons-lang。

commons-lang中,它被定义为:

public static final Integer INTEGER_ONE = new Integer(1);

commons-lang3中,它被定义为:

public static final Integer INTEGER_ONE = Integer.valueOf(1);

第一个版本不使用内部整数缓存(因为还不存在),而第二个版本利用了它。

现在,无论您使用什么版本,当您比较数值并且您不分配或创建数值时,您的问题并不重要(缓存可能更有意义的情况)。


假设您以这种方式使用它:

if (x == NumberUtils.INTEGER_ONE)
  • ifx是一个原语,它不是很有效,因为它会产生一个拆箱操作来转换NumberUtils.INTEGER_ONE为一个1int 原语。

  • Ifx是一个对象,这不是一个好主意,因为Integer对象应该与equals()或进行比较intValue()

于 2017-07-14T06:53:56.383 回答