我正在玩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的实例而不是原始...我真的怀疑这甚至没有任何意义!
答案 0 :(得分:4)
Java最后执行=
,如果你这样做
m = m++;
你实际上在做什么
int tmp = m;
m++;
m = tmp;
这只是让自己迷惑的好方法,所以不要这样做。 ;)
但是,如果你想让自己感到困惑,你可以全力以赴地编写这样的代码。
for (char ch = 0; ch < Character.MAX_VALUE; ch++)
if (Character.isJavaIdentifierPart(ch) && !Character.isJavaIdentifierStart(ch))
System.out.printf("%04x <%s>%n", (int) ch, "" + ch);
它甚至看起来不像它编译,但确实如此。它会打印您可以在Java标识符中使用的所有非ascii字符。