对于 final 域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个 final 域的写,与随后把这个构造对象的引用赋值给一个变量,这两个操作之间不能重排序 初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序 举个例子: public class FinalExample { int i;// 普通变量 final int j;// final 变量 static FinalExample obj; public FinalExample() { i = 1;// 写普通域 j = 2;// 写 fi