i i 1和i 1完全等價嗎?

2021-09-01 23:30:07 字數 636 閱讀 2851

可能有很多程式設計師認為i+=1只是i=i+1的簡寫方式,其實不然,它們乙個使用簡單賦值運算,乙個使用復合賦值運算,而簡單賦值運算和復合賦值運算的最大差別就在於:

復合賦值運算子會自動地將運算結果轉型為其左運算元的型別

。看看以下的兩種寫法,你就知道它們的差別在哪兒了:

(1)byte i=5;

i+=1;

(2)byte i=5;

i=i+1;

第一種寫法編譯沒問題,而第二種寫法卻編譯通不過。原因就在於,當使用復合賦值運算子進行操作時,即使右邊算出的結果是int型別,系統也會將其值轉化為左邊的byte型別,而使用簡單賦值運算時沒有這樣的優待,系統會認為將i+1的值賦給i是將int型別賦給byte,所以要求強制轉換。理解了這一點後,我們再來看乙個例子:

byte b=120;

b+=20;

system.out.println("b="+b);

說到這裡你應該明白了,上例中輸出b的值不是140,而是-116。因為120+20的值已經超出了乙個byte表示的範圍,而當我們使用復合賦值運算時系統會自動作型別的轉化,將14

0強轉成byte,所以得到是-116。由此可見,在使用復合賦值運算子時還得小心,因為這種型別轉換是在不知不覺中進行的,所以得到的結果就有可能和你的預想不一樣。

Mysql中( i i 1)的作用

oracle中有乙個偽列rownum,可以在生成查詢結果表的時候生成一組遞增的序列號。mysql中沒有這個偽列,但是有時候要用,可以用如下方法模擬生成一列自增序號。1 sql示例 select i i 5 as rownum,surname,personal name from student,se...

Mysql中( i i 1)的作用

oracle中有乙個偽列rownum,可以在生成查詢結果表的時候生成一組遞增的序列號。mysql中沒有這個偽列,但是有時候要用,可以用如下方法模擬生成一列自增序號。1 sql示例 select i i 5 as rownum,surname,personal name from student,se...

i 與 i 1的互換情況

只有語句中僅僅包含 i i 1 時,此時是可以互換的。否則不一定可以。因為 i 返回值為i,然後將i 1 i i 1返回的是i 1 賦值語句之後的i值 例如 if i a 0 這條語句是說 如果i不等於0,a賦值為0,並且i進行加一操作 此時等價於if i 0 注意,i 操作是在判斷過if條件後做的...