谁触发原始类型的初始化?

Xel*_*ian 1 java primitive initialization

我想知道是谁/什么触发了Java中原始类型的初始化,例如:

public class A {
    int primitive;
    String nonPrimitive;

    public static void main(String[] args) {
        A newObject = new A();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,当我们创建新实例时A,A会调用类的默认构造函数.String扩展了Object,因此调用了Object的构造函数并nonPrimitive创建了var并且具有null值.

原始变量的情况如何?如果它由VM直接初始化,默认值为0,如果创建新的newObject触发它?或者它是在创建之前创建的 newObject

Mar*_*oun 5

创建对象时,将创建其字段.

new A();
Run Code Online (Sandbox Code Playgroud)

这些字段已初始化,每个字段都有其默认值 - 根据JLS 4.12.5中的说明.变量的初始值:

对于所有引用类型(第4.3节),默认值为null.

这就是String初始化的原因null.请参阅完整表以查看其他值(是的,默认情况下,整数类变量设置为0).

另见12.4.1.初始化发生时,它会详细说明初始化类时会发生什么.