【问题标题】:Is using constants like INTEGR_ONE a good way, why can't we use the 1 itself?使用像 INTEGR_ONE 这样的常量是一种好方法,为什么我们不能使用 1 本身?
【发布时间】:2021-07-09 08:34:32
【问题描述】:

在我的项目中,我看到很多地方使用了 INTEGER_ONE、INTEGER_ZERO 等常量。这样使用的目的是什么?我们使用常量来改变一个地方的值,该值会自动反映在特定情况下的任何地方,但是使用像 INTEGER_ONE 这样的常量就像使用 1 一样,它是通用值,无论它们将在所有地方使用的情况如何。当我们需要从我们显然需要访问的地方更改一个的值并将其更改为另一个值,例如 INTEGER_N。那么为什么我们不能直接使用数字呢?

【问题讨论】:

  • 你在正确的轨道上。不要使用像INTEGER_ONE 这样的常量。与this related answer比较。

标签: java constants coding-style


【解决方案1】:

如果你翻遍documentation,你会发现,INTEGER_ONE被表述为:

一个可重复使用的整数常量。

而且,INTEGER_ONE 的实际声明是:

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

在 Java 中,-128127 之间的值保存在 IntegerCache 中以供重用。因此,如果您使用指定范围内的参数调用Integer.valueOf() 方法,在这种情况下,将始终返回相同的对象。由于创建对象的成本很高,如果必须使用 Integer,这是一种优化。

但是,如果你使用原始类型,比如int,那么就不需要使用INTEGER_ONE,你可以直接使用1

【讨论】:

  • 也帮助我。 date.plusdays(INTEGER_ONE) 与 date.plusdays(1) 有什么区别?哪个最好用,为什么?
  • @Prasath 只需使用plusdays(1)
【解决方案2】:

有一个不使用魔法常量的样式规则。喜欢7 - 一周中的几天,DAYS_IN_WEEK?但是INTEGER_ONE 可用于任何用途,1 恕我直言,更糟。

有一个用例:常量对象,要共享。 BigDecimal.ZERO 就是这样一个例子。 如果INTEGER_ONE 不是int 而是包装对象Integer,那么您可以共享同一个对象,而无需创建过多具有相同值的整数对象。 然而,Integer.valueOf(n) 也会为 -128 到 127 之间的值提供相同的对象。一般来说,不应该使用包装类;此处为整数,当使用 int 值时。但是像List<Integer> 这样的集合使用整数。

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    相关资源
    最近更新 更多