2

我有一段简单的 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,但那里也没有运气。

4

1 回答 1

7

You have characters that make displaying weird. Actual code:

  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 }            

<202e> is called "right-to-left override"
<202d> is "left-to-right override"

于 2013-07-17T18:25:28.200 回答