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

时间:2013-07-17 18:19:19

标签: 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);
    }
}

我希望它能打印“x:1234”。

javac A.java && java A
x: 3
Exception in thread "main" java.lang.NoSuchMethodError: main

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

1 个答案:

答案 0 :(得分: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 }            

&LT; 202E&GT;被称为“从右到左覆盖”
&LT; 202D&GT;是“从左到右覆盖”