本帖最后由 西门吹风 于 2014-5-25 22:44 编辑
在谷歌上搜到的,可以看一下
翻译:
- int a = 0;
- a = a++;
- System.out.println(a);
复制代码 上面打印的结果是什么?
超过50%的程序员会回答1,一些剩余的会说“我不知道”,其他人会说0。说0的人是正确的!永远不要去写这样的代码,但出于学术目的,让我们试着理解为什么它打印0。 原因在于JLS(Java语言规范)。JLS要求在一个赋值表达式中,必须首先评估等号的右边,然后表达式的值必须分配到左边。右边首先被评估为0,因为a++是一个后自增表达式,然后这个值被保存到临时变量里。与此同时后自增表达式a++发生变化——〉a=a + 1,最后,临时变量的值分配给了a,a也就失去了增量。
如果我们把上面的代码改成虚拟码可以得到:- a = 0
- temp = a (a++表达式的值)
- a = a + 1 (后增量的影响)
- a = temp;
复制代码 这就是为什么你得到的是0,希望已经足够清楚
|