自增自减运算符
1、自增(++)自减(–)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数。
实例
public class selfAddMinus{
public static void main(String[] args){
int a = 3;//定义一个变量;
int b = ++a;//自增运算
int c = 3;
int d = --c;//自减运算
System.out.println("进行自增运算后的值等于"+b);
System.out.println("进行自减运算后的值等于"+d);
}
}
运行结果为:
进行自增运算后的值等于4
进行自减运算后的值等于2
解析:
int b = ++a; 拆分运算过程为: a=a+1=4; b=a=4, 最后结果为b=4,a=4
int d = --c; 拆分运算过程为: c=c-1=2; d=c=2, 最后结果为d=2,c=2
2、前缀自增自减法(++a,–a): 先进行自增或者自减运算,再进行表达式运算。即先运算再用。
3、后缀自增自减法(a++,a–): 先进行表达式运算,再进行自增或者自减运算。即先用在运算。
实例:
public class selfAddMinus{
public static void main(String[] args){
int a = 5;//定义一个变量;
int b = 5;
int x = 2*++a;
int y = 2*b++;
System.out.println("自增运算符前缀运算后a="+a+",x="+x);
System.out.println("自增运算符后缀运算后b="+b+",y="+y);
}
}
运行结果为:
自增运算符前缀运算后a=6,x=12
自增运算符后缀运算后b=6,y=10
下面列出一道经典面试题
public class selfAddMinus{
public static void main(String[] args){
int i = 1;
i = i++;
System.out.println(i);
int j = i++;
int k = i+ ++i*i++;
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
}
运行结果:
i=1
i=4
j=1
k=11
分析
理解这道题,要有操作栈的思想。 i = 1; i++ ; 那么会输出的结果是2 ,如果是i = ++i ; 输出的结果也是2。可是 如果 写成 i = i++;的话 ,无论运行多少次结果都是1,
操作数栈
Java虚拟机的解释执行引擎被称为"基于栈的执行引擎",其中所指的栈就是指操作数栈。
操作数栈也常被称为操作栈。
和局部变量区一样,操作数栈也是被组织成一个以字长为单位的数组。但是和前者不同的是,它不是通过索引来访问,而是通过标准的栈操作—压栈和出栈—来访问的。比如,如果某个指令把一个值压入到操作数栈中,稍后另一个指令就可以弹出这个值来使用。
int i=1;此时操作栈中 i 的值变为 1 ,
栈外 | 操作栈 |
---|---|
i=1 | i=1 |
执行 i=i++ | |
– | 先用再加,i=1 |
执行++操作 i=2 | i=1 |
执行赋值运算符,把操作栈内存的 i 的值赋给i | i=1 |
下面的计算以此类推。
int j = i++;
i 的值赋给j ,j = 1,
然后执行++操作 i = 2
int k = i+ ++i*i++;
k = 2 + 3*3 = 11
然后执行++操作 i 变为4,
希望以上讲解对你有所帮助!