i 和 i 的區別

2022-08-11 06:48:10 字數 1185 閱讀 5360

先說運算規則吧。

i++ 是先賦值後自增;++i 是先自增後賦值。

以下是**示例:

int a=0;

int b=0;

int i=0;

a=i++;

system.out.println("a的值為:"+a);

system.out.println("i的值為:"+i);

b=++i;

system.out.println("b的值為:"+b);

system.out.println("i的值為:"+i);

執行結果為:

a的值為:0i的值為:1b的值為:2i的值為:2

i++是先賦值後自增,所以 a=i++ 可以分解為兩步,先運算 a=i ;再運算 i=i+1;所以a的值為0,i 的值為1。

++i是先自增後賦值,所以 b=++i 可以分解為兩步,先運算 i=i+1;再運算 b=i ;所以b的值為2,i 的值為2。

再看一下比較繞的情況:

public

static

void

main(string args)

你能準確的說出 i 和 a 的值嗎?

**執行結果如下:

i的值為:0a的值為:5

是不是 i 的值很令人迷糊?

a 的值很好解釋,++a是先自增後賦值,所以 a = ++a 等價於 a=a+1 ; a=a ;運算後 a 的值為1,以此類推,最後 a 的值為5。

但 i 的值就不符合我之前的計算了,i++ 是先賦值後運算,所以 i=i++ 可以拆分為 i=i;i=i+1;運算後,i 的值應該也為1,以此類推,最後 i 的值應該也為5才對,但最後的運算結果為0,這就很令我迷糊了。

請看下面這種解釋:

初始 i 的值為0,i=i++ 時,i=0 這個值先進暫存器,然後 i 的值自增1,但在最後賦值的時候,暫存器中的值0會覆蓋 i 新增後的值1成為最終結果,所以無論計算多少次,最後的結果都是為 0 。

請看下面這個例子

public

static

void

main(string args)

結果如下:

i的值為:2a的值為:2

計算過程請自己思考。

i和i 的區別

大家都應該知道i 和 i的區別,前者是先使用i的值,然後再增加1,而後者是先增加1然後再使用i的值。但是i 和 i那個更好呢?我們實現角度來看 前者是將i值加1後賦給i,然後返回i本身 而後者是先用個臨時變數儲存i值,然後將i值加1賦給i,然後返回臨時變數的值。內建資料型別他們的效率差不多,看他們的...

i 和 i的區別

當年上c 課的時候對於i 和 i的區別就稀里糊塗。後來沒注意也沒出過什麼問題。但是這個問題還是應該搞清楚。假如有乙個vector,值為 1,2,3,4,5,6,7 用以下程式輸出 i 0 while i 7 i 0 while i 7 cout beforei v i endl cout befor...

i 和 i的區別

很多朋友在學習基礎的時候很容易遇到過這個問題,i和i 到底有什麼區別?下面來詳細解釋一下。首先i 和 i單獨為一條語句時沒有任何區別 例如 int i 1 i 單獨為一條語句 system.out.println i i i 2 int i 1 i 單獨為一條語句 system.out.printl...