Java的中間快取變數機制
阿新 • • 發佈:2019-01-05
//對於後增運算子
for(int i=0;i<100;i++)
{
j = j++;
}
等同於:
int temp = j;
j = j + 1;
j = temp;
//對於前增運算子
for(int i=0;i<100;i++)
{
j = ++j;
}
等同於:
j = j + 1;
int temp = j;
j = temp;
解釋:
這是因為Java在進位制自增運算時,使用了Java的中間變數快取機制。
進行自增運算時,Java會為每一個自增表示式新建一個臨時變數,
如果是字首加(++j),就會“先自加1後賦值(給臨時變數)”;
如果是字尾加(j++),就會“先賦值(給臨時變數)後自加1”。
運算最終使用的,並不是變數本身,而是被賦了值的臨時變數。
注意:
j = j++ + ++j;
//等同於
int temp1 = 0;
j = j + 1; //j = 1
j = j + 1; //j = 2
int temp2 = j; //temp2 = 2;
j = temp1 + temp2;//j = 0 + 2
兩者之間的區別
j = ++j + j++;
//等同於
j = j + 1;
int temp1 = j; //temp1 = 1
int temp2 = j; //temp2 = 1
j = j + 1;
j = temp1 + temp2;//j = 1 + 1