使用 NumberUtils.INTEGER_ONE 和其他此类实用程序的好处
Benefits of using NumberUtils.INTEGER_ONE and other such utilities
在java中为了比较if语句,我写了
if (x == 1)
并在代码审查中收到一条评论,使用 NumberUtils.INTEGER_ONE 而不是 1。我想知道它实际上会给代码带来什么好处。
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)
如果 x
是原语,效率不高,因为它会产生一个拆箱操作,将 NumberUtils.INTEGER_ONE
转换为 1
int 原语。
如果 x
是一个对象,这不是一个好主意,因为 Integer
对象应该与 equals()
或 intValue()
进行比较。
在java中为了比较if语句,我写了
if (x == 1)
并在代码审查中收到一条评论,使用 NumberUtils.INTEGER_ONE 而不是 1。我想知道它实际上会给代码带来什么好处。
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)
如果
x
是原语,效率不高,因为它会产生一个拆箱操作,将NumberUtils.INTEGER_ONE
转换为1
int 原语。如果
x
是一个对象,这不是一个好主意,因为Integer
对象应该与equals()
或intValue()
进行比较。