int i=5;
int s=(i++)+(++i)+(i--)+(--i);
System.out.println(s);
的值是什么?
这里出错的地方是(i++)
和(++i)
的运算模糊
对于(i++)
运算是先取i的值,再进行i=i+1
的运算,即最后i的值是6,但(i++)
的值是5,
对于(++i)
运算进行i=i+1
的运算,再取i的值,即最后i的值是7,(i++)
的值也是7,
对于(i--)
和(--i)
的运算规则于上面相同。
最后s的值是24
有必要补充一下运算符的优先级
从高到低
优先级 | 描述 | 运算符 |
1 | 括号 | () [] |
2 | 正负号 | + - |
3 | 自增自减,非 | ++ -- ! |
4 | 乘除,取余 | * / % |
5 | 加减 | + - |
6 | 移位运算 | << >> >>> |
7 | 大小关系 | > >= < <= |
8 | 相等关系 | == != |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ?: |
15 | 赋值运算 | = += -= *= /= %= |
16 | 位赋值运算 | &= |= <<= >>= >>>= |
嗯…分析完上面的那道题,有复习了一下运算优先级,我以为已经差不多了,然后偶然间刷到了一个视频(╯‵□′)╯︵┻━┻,就是下面这道:
public static void main(String[] args) {
int i=1;
i=i++;
int j=i++;
int k=i+++i*i++;
System.out.println("i="+i);
System.out.println("j="+j);
System.out.println("k="+k);
}
结果如下:
i=4
j=1
k=11
就直接搬用视频的讲解吧(反正我也说不出个花):
首先是i=i++的过程详解:
接着来分析j=i++:
来直面BOSSint k=i+++i*i++;
:
这里先声一下int k=i+++i*i++;
执行时是int k=i+(++i)*i++;
这样执行的,为什么不是int k=(i++)+i*i++;
能有大佬来解释一下吗?多谢!
总结一下大概就是:
- 碰到新来的,压入栈
- 需要进行运算,到栈中找对应的值运算
- 运算完成后进行了“=”操作(甭管明的暗的),结果压入栈
- 最重要的一点是输出的值是栈中的值
- 附上视频地址:https://www.bilibili.com/video/av37602130/?p=1