java基础 单目运算符++/--的陷阱

直接上个陷阱:

int i = 1;
i = i++;
System.out.println(i);//结果为?
i++;
System.out.println(i);//结果为?
结果如图所示

image

我反正懵了
image

这里解释一下:
在Java中,所有的等式都是需要分配额外的一个临时变量来存储等式右边的计算结果,然后单独赋给等式左边的变量。

// i = i + 1;
int temp0 = i + 1;
i = temp0;

当计算机遇到i = i++这个算式的时候,背后的运算逻辑是这样子的:

// i = i++;
int temp1 = i;
i = i + 1;
i = temp1;

当计算机遇到i = ++i这个算式的时候,背后的运算逻辑是这样子的:

// i = ++i;
i = i + 1;
int temp2 = i;
i = temp2;

怎么是这个样子呢???没办法就是这么设计的你去问高斯林罢(
开个玩笑开个玩笑,其实原因很简单,就是++i中的++的算术优先级是比=要高的,而i++中的++优先级低于=,因此就存在了先后顺序,这道题目看似很简单但是很容易答错,需要摒弃惯性思维。
image

posted @ 2022-06-10 15:01  Kisen  阅读(598)  评论(0)    收藏  举报