前加加,后加加这一块内容比较容易混淆,写个笔记记下来方便复习。
目录
前++与后++
前++:先自增1,后运算
后++:先运算,后自增1
class Test{
public static void main(String[] args){
int a1 = 10;
int b1 = ++a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);
int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b2 = " + b2);
int a3 = 10;
a3++;
int b3 = a3;
System.out.println(b3);
}
}
>>> a1 = 11,b1 = 11
a2 = 11,b2 = 10
11
无论是前++还是后++,都遵循自左向右的程序运行顺序
++a1,先加1,再运算,所以a1,b1的值都有改变
a2++,先运算,再加1,所以a2自身运算加1,但是自左向右运行程序,还没有来及加1,b2已经被赋值,所以b2的值是10
b3之所以是11,是因为a3++单独一行,已经运算完成才赋值给b3,所以b3是11
前--与后--
前--:先自减1,后运算
后--:先运算,再自减1
class Test{
public static void main(String[] args){
int a1 = 10;
int b1 = --a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);
int a2 = 10;
int b2 = a2--;
System.out.println("a2 = " + a2 + ",b2 = " + b2);
int a3 = 10;
a3--;
int b3 = a3;
System.out.println(b3);
}
}
>>> a1 = 9,b1 = 9
a2 = 9,b2 = 10
9
与++用法相同,就不解释了哈
注意事项
注意:自增自减不会改变变量本身的数据类型
class Test{
public static void main(String[] args){
short s1 = 10;
//s1 = s1 + 1; 编译失败
//s1 = (short)(s1 + 1); 正确
s1++;
System.out.println(s1);
byte b1 = 127;
b1++;
System.out.println(b1);
}
}
>>> 11
-128 //此处并非类型转换,而是遵循了二进制中的127+1,满2进1,使得符号位变位
b1++并非类型转换,而是遵循了二进制中的127+1,满2进1,使得符号位变位,变为 -128