自增变量
- i++
先赋值,后自增 - ++i
先自增,后赋值 -
注意
赋值=,最后计算
=右边的从左边加载值依次压入操作数栈
实际先算哪个,看运算符优先级
最后赋值前,临时结果也是存储在操作数栈中
例题
第一题
答案:i=4,j=1,k=11
解析如图:
第二题
int num = 5;
int ret = num++ * ++num;
答案:ret=35
解析如图:
第三题
int num = 5;
++(num++);
Demo7.java:5: 错误: 意外的类型
++(num++);
^
解析:
因为(num++)是存在于小括号以内,按照计算优先级处理,首先计算小括号里面的内容,但是因为小括号是一个整体,对外的数据时num++的结果,这是一个常量!!!
自增自减运算符,只能操作变量,不可以操作常量。
语法报错!!!
第四题
int count=0;
for(int i=0;i<100;i++){
count = count++;
}
System.out.println("count="+count);
答案:count=0
解析:
首先 count++ 是一个有返回值的表达式,返回值是 count 自加前的值,Java 对自加处理的流程是先把 count 的值(不是引用)拷贝到一个临时变量区,然后对 count 变量加1,接着返回临时变量区的值。
所以上面代码块中第一次循环的执行步骤是 JVM 把 count 值(0)拷贝到临时变量区,然后 count 值加 1,这时 count 的值是 1,接着返回临时变量区的值(值是 0),最后返回值赋值给 count,此时 count 值被重置成 0;所以上面代码语句 count = count++; 可以按照如下代码来理解:
int autoAdd(int count){
int temp=count;
count=count+1;
return temp;
}