在java中,执行自增运算时,会为每一个自增操作分配一个临时变量,如果是前缀加(++i),就会“先自加1后赋值(给临时变量)”;如果是后缀加(i++),就会“先赋值(给临时变量)后自加1”。运算最终使用的,并不是变量本身,而是被赋了值的临时变量。
在java中,执行自增运算时,会为每一个自增操作分配一个临时变量,如果是前缀加(++i),就会“先自加1后赋值(给临时变量)”;如果是后缀加(i++),就会“先赋值(给临时变量)后自加1”。运算最终使用的,并不是变量本身,而是被赋了值的临时变量。
/**下来代码执行的结果*/
import java.util.*;
public class Test2{
public static void main(String args[]){
int i = 0;
i = i++ + ++i;
int j = 0;
j = ++j + j++ + j++ + j++;
int k = 0;
k = k++ + k++ + K++ + ++k;
int h = 0;
h = ++h + ++h;
System.out.println("i="+i);
System.out.println("j="+j);
System.out.println("k="+k);
System.out.println("h="+h);
}
}
int i = 0;
i = i++ + ++i; //i=2,等效执行以下程序
/*
* temp1 = i; //i=0,temp1=0
* i = i + 1; //i=1
* i = i + 1; //i=2
* temp2 = i; //i=2,temp2=2
* a = temp1 + temp2 //i=2;
*/
int j = 0;
j = ++j + j++ + j++ + j++; //j=7
/*
* j = j + 1; //j=1
* temp1 = j; //j=1 , temp1=1
* temp2 = j; //j=1, temp2=1
* j = j + 1; //j=2
* temp3 = j; //j=2,temp3=2
* j = j + 1; //j=3
*temp4 = j; //j=3 ,temp4=3
*j = j + 1; //j=4
* j = temp1 + temp2 + temp3 + temp4 //j=7;
*/
int k = 0;
k = k++ + k++ + K++ + ++k; //k=22
/*
* temp1 = k; //k=0, temp1=0
* k = k + 1; //k=1
* temp2 = k; //k=1,temp2=1
* k = k + 1; //k=2
*temp3 = k; //k=2 ,temp3=2
*k = k + 1; //k=3
* k = k + 1; //k=4
* temp4 = k; //k=4 , temp4=4
* k = temp1 + temp2 + temp3 + temp4 //k=7;
*/
int h = 0;
h = ++h + ++h; //h=3
/*
* h = h + 1; //h=1
* temp1 = h; //k=1 , temp1=1
* h = h + 1; //h=2
* temp2 = h; //h=2, temp2=2
* h = temp1 + temp2 //h=3;
*/