是否有任何理由使用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?
}

我知道在添加Autoboxing之前,在较旧版本的Java中这是必要的。此类代码的任何理由是否存在?还是只是一个坏习惯?

有帮助吗?

解决方案

  • 1.5出来之前,有很多代码。没有带来任何好处的情况下,无需更新所有内容。
  • 在某些情况下,您可以更清楚地表明您 拳击。在您给出的情况下,您可以轻松地在同一行上看到目标类型 - 但并非总是如此。
  • 如果您想调用两个都超载的方法 Integerint 你想打电话给 Integer 超负荷,这是一种简单的方法。

其他提示

程序员可能会选择以这种方式编写它,以便从视觉上强调Day_1是一个整数(对象),而不是int。

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

除了乔恩(Jon)的原因外,有些人根本不喜欢汽车(联合国)拳击。有很多细微差别,有些人选择通过可选的编译错误或警告禁止使用其使用(Eclipse可以将其变成错误或警告),例如),例如)

如果是这样,即使在这样的情况下,除了使用第一个的情况下,没有太多选择。

就编译器而言,没有差异(尽管在过载论点的情况下应该使用护理)。在引擎盖下,Day_2所示的表格仅由编译器简单地转换为Day_1使用的表格。

对于人类,可能会有区别。我通常会避免自动拳击作为防御性编程的行为,因为我觉得这种做法使我很容易忘记无效的情况。但实际上,这取决于您。

Autoboxing可能会导致非常微妙的错误,这可能很难找到。因此,当使用任何类型的拳击/拆箱时,有些IDE可以生成警告。如果您想沉默,此警告选项1将为您做。

因此,最后,这一切都取决于个人喜好和项目的编码标准。

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

integer.valueof(1)允许缓存共同值;对于-128到128的值,它始终将返回相同的对象,而新整数(1)将始终返回新对象。我想说的是,最好将其用于所有数字派生类型(整数,长,bigdecimal等),尽管这可能是Autoboxing在封面下所做的。

Bart van Heukelom,List.Remove(1)和List.Remove(New Integer(1))之间的区别是; list.remove(1)将从列表中删除索引1的对象,list.remove(new Integer(1))将删除列表中的所有对象等于具有一个值的整数对象。请记住,集合不能存储原始物,而只能存储对象。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top