类中的volatile变量是否会默认设置为0?
我知道 java 将有一个默认构造函数来将变量初始化为 0,但是 volatile 变量呢?
class Test {
volatile long a;
volatile double b;
volatile int c;
}
我打印它们,每次结果都是 0,但能保证吗?
回答
Java 语言规范第 4.12.5 节说:
每个类变量、实例变量或数组组件在创建时都使用默认值进行初始化:
- 对于byte类型,默认值为0,即(byte)0的值。
- 对于short类型,默认值为0,即(short)0的值。
- 对于 int 类型,默认值为 0,即 0。
- 对于 long 类型,默认值为零,即 0L。
- 对于 float 类型,默认值为正零,即 0.0f。
- 对于 double 类型,默认值为正零,即 0.0d。
- 对于char类型,默认值为空字符,即'u0000'。
- 对于类型 boolean,默认值为 false。
- 对于所有引用类型(第 4.3 节),默认值为 null。
如您所见,此规则适用于所有领域,无论其波动性如何。