在 Java 中,为什么要在构造函数外部初始化数据字段,然后在构造函数内部为其赋予不同的值?

In Java, why would you initialize a data field outside of the constructor, but then give it a different value inside the constructor?

我正在阅读 Koffman 和 Wolfgang 的 Data Structures,在 ArrayList 的实现中,他们在构造函数之外初始化了一个数据字段,然后给它一个不同的构造函数中的值。

public class KWArrayList {
    private static final int INITIAL_CAPACITY = 10;
    private int capacity = 0;

    public KWArrayList() {
        capacity = INITIAL_CAPACITY;
    }
}

为什么他们在构造函数之外将 capacity 初始化为 0,然后在构造函数中为其赋予不同的值?

在这个特定的例子中,当唯一的构造函数将值设置为常量 10 时,默认为零是没有意义的。没有伤害,但也没有好处。

正如其他人评论的那样,您的教科书中可能会出现更多内容,将此 class 和子class 进化到默认值为零有意义的程度。

但是……默认为零特别没有意义,因为原语 int 自动默认为零。一个可能的好处是,编写程序可以向任何阅读程序员明确说明零确实是他们预期的默认值。