代码之家  ›  专栏  ›  技术社区  ›  Tom Tresansky

integer.value of()的值

  •  3
  • Tom Tresansky  · 技术社区  · 14 年前

    是否有任何理由使用integer.valueof(x)初始化最终整数,如下所示:

    public class MyClass
    {
      public static final Integer DAY_1 = Integer.valueOf(1); // Why do it this way?
      public static final Integer DAY_2 = 2; // When it can be done this way?
    }
    

    我知道,在添加自动装箱之前,在旧版本的Java中,这是必要的。这种类型的代码还有什么原因吗?还是只是个坏习惯?

    7 回复  |  直到 13 年前
        1
  •  8
  •   Jon Skeet    14 年前
    • 在1.5出来之前写了很多代码。没有必要在不带来任何好处的情况下更新所有内容。
    • 在某些情况下,它使你更清楚 拳击。在您给出的情况下,您可以很容易地在同一行上看到目标类型——但情况并非总是这样。
    • 如果要调用一个方法,该方法对两个方法都有重载 Integer int 你想打电话给 整数 过载,这是一种简单的方法。
        2
  •  4
  •   Drew Wills    14 年前

    程序员可以选择这样写,以便直观地强调day_1是整数(object),而不是int。

    我不是说我推荐它,但我可以想象有人出于这个原因采用这种方法。

        3
  •  4
  •   Mark Peters    14 年前

    除了乔恩的原因,有些人根本不喜欢自动(联合国)拳击,句号。有些人选择通过可选的编译错误或警告(Eclipse可以将其转换为错误或警告,例如)来禁止它的一般使用,从而明确地避免了它的许多细微差别。

    如果是这样的话,除了使用第一个,没有太多的选择,即使在这样的情况下,它并没有真正获得太多。

        4
  •  1
  •   Robert J. Walker    14 年前

    就编译器而言,没有区别(尽管在参数过载的情况下应该小心)。在引擎盖下,为第2天显示的表单被编译器简单地转换为第1天使用的表单。

    对人类来说,可能会有不同。我通常避免将自动(un)装箱作为防御编程的一种行为,因为我觉得这种做法太容易让我忘记空的情况。但实际上,这取决于你。

        5
  •  1
  •   Alexander Pogrebnyak    14 年前

    自动氧化会导致非常细微的错误,这些错误可能很难找到。 因此,一些IDE能够在使用任何类型的装箱/拆箱时生成警告。如果您想消除此警告,选项1将为您执行此操作。

    所以,归根结底,这都取决于个人偏好和项目的编码标准。

    在这种特殊情况下,使用自动氧化没有危险。

        6
  •  1
  •   Kevin Lafayette    13 年前

    integer.valueof(1)允许缓存公共值;对于-128到128之间的值,它将始终返回相同的对象,例如,而new integer(1)将始终返回新的对象。我要说的是,将它用于所有从数字派生的类型(integer、long、bigdecimal等)是一个很好的实践,尽管这可能是autoboxing在封面下所做的。

    Bart van Heukelom,list.remove(1)和list.remove(新整数(1))之间的区别是:list.remove(1)将从list.list中删除索引1处的对象。remove(新整数(1))将删除列表中与值为1的整数对象相等的所有对象。请记住,集合不能存储基元,只能存储对象。

        7
  •  -1
  •   Aaron Digulla    14 年前

    这是一个坏习惯,没有理由这样做,因为编译将生成 Integer.valueOf() 为你。