水滴石穿-深海骚知识TAT

本文最后更新于:May 21, 2022 pm

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。

目录

自加处理

2022年5月21日

首先看一段代码:

1
2
3
4
5
int cnt = 0;
for(int i=1;i<=10;++i){
cnt=cnt++;
}
System.out.println(cnt);

正确答案:0。(第一眼是不是很神奇、很离谱)

解析

  • 对于JVM来说,对于自增运算的处理是:先定义一个临时变量来接受cnt的值,然后再将cnt进行自增运算,最后又将临时变量赋给了自增后的cnt,所以会进行覆盖。如下代码:
1
2
3
4
5
6
int cnt=0;
for(int i=1;i<=10;++i){
int t = cnt;
cnt++;
cnt = t;
}

同理,对于自减一样的道理:

1
2
3
4
5
6
7
8
9
10
11
12
13
int cnt = 1;
for(int i=1;i<=10;++i){
cnt=cnt--;
}
System.out.println(cnt); //1

int sum=1;
for(int i=1;i<=10;++i){
int t = sum;
sum--;
sum = t;
}
System.out.println(sum); //1