Java运算符优先级

时间:2014-01-01 19:28:21

标签: java operator-precedence

我正在玩java代码,直到我碰到这个坚硬的墙:

int m = 5;
            System.out.println(m++);
            System.out.println(++m);
            System.out.println(m = ++m * 2);
            System.out.println(m = m++ * 2);

            System.out.println(m);

和输出(我实在无法解释)如下:

5
7
16
32
32

这真让我抓狂!为什么编译器在乘法之前跳过最后的m ++?是编译器将m添加到另一个m的实例而不是原始...我真的怀疑这甚至没有任何意义!

1 个答案:

答案 0 :(得分:4)

Java最后执行=,如果你这样做

m = m++;

你实际上在做什么

int tmp = m;
m++;
m = tmp;

这只是让自己迷惑的好方法,所以不要这样做。 ;)


但是,如果你想让自己感到困惑,你可以全力以赴地编写这样的代码。

for (char c‮h = 0; c‮h < Character.MAX_VALUE; c‮h++)
    if (Character.isJavaIdentifierPart(c‮h) && !Character.isJavaIdentifierStart(c‮h))
        System.out.printf("%04x <%s>%n", (int) c‮h, "" + c‮h);

它甚至看起来不像它编译,但确实如此。它会打印您可以在Java标识符中使用的所有非ascii字符。