我觉得你的回答没有问题,我查了一下viotile的oracle官方文档,里面明确了是可以禁止重排序的,如果不禁止重排序,需要保证重排序的所有结果和不重排序是一样的。
官网viotile地址:https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.3.1.4
关于new关键字的问题:我使用idea自带的show bytecode工具查看字节码,结果如下:
后面的注释是我自己加上的
L9 // 第九个子程序
LINENUMBER 15 L9 // 第九个子程序对应代码第15行, 这行中只有new 的一句话
NEW org/short_address/org/keyword/VolatileTest // 生产对象
DUP
INVOKESPECIAL org/short_address/org/keyword/VolatileTest.<init> ()V // 初始化
PUTSTATIC org/short_address/org/keyword/VolatileTest.object : Lorg/short_address/org/keyword/VolatileTest; // 把new的对象引用赋值给object对象
综上所述,我觉得楼主回答的没有问题