设置一个变量并打印它,没有任何线程,但它打印旧值?

Dog*_*Dog 2 java security unicode

我有一段简单的Java代码:

class A {
    static {
        int x=3;
        int y?;
        int yy=1234;
        int yyy?;y?=1;int z?y=x;
        System.out.println("x: "+x);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望它打印"x:1234".

javac A.java && java A
x: 3
Exception in thread "main" java.lang.NoSuchMethodError: main
Run Code Online (Sandbox Code Playgroud)

但相反它打印"x:3".为什么?这是另一种我不知道的优化类型吗?我认为如果你有多个线程,volatile只会很重要吗?我尝试将所有变量设置为volatile,甚至将锁定放在它们周围,但没有运气.有人告诉我,我应该在课堂上设置strictfp,但也没有运气.

Ria*_*iaD 7

你有使角色显示怪异的角色.实际代码:

  1 class A {                                                                                                               
  2     static {                                                                                                            
  3         int x=3;                                                                                                        
  4         int y<202d>;                                                                                                    
  5         int yy=1234;                                                                                                    
  6         int yyy<202e>;y<202d>=1;int z<202e>y=x;                                                                         
  7         System.out.println("x: "+x);                                                                                    
  8     }                                                                                                                   
  9 }            
Run Code Online (Sandbox Code Playgroud)

<202e>被称为"从右到左覆盖"
<202d>是"从左到右覆盖"

  • 出于好奇,你使用了什么编辑器? (3认同)