i i和i 1 i i 1 的問題

2021-09-19 08:08:39 字數 1625 閱讀 1034

邏輯運算中,關於i++ 、 ++i和i+=1、i=i+1 等這類問題是也筆試必考內容之一,基礎中的基礎。如果不會,那就已經可以看出你個人的基礎水平了。雖然看上去簡單,但是不懂原理是不行的。只有了解原理才能記憶最深

i++:先賦值,在相加,

++i:先相加,在賦值

實戰以下,看以下**

public

class

test

public

static

intprint2()

public

static

void

main

(string[

] args)

}

執行結果為:1,2,0,2;

我們獲取以下方法執行時的指令集

public

static

intprint1()

public

static

intprint2()

檢視彙編指令如下

0: iconst_0 //將int型別常量0壓入棧

1: istore_0 //將int型別值存入區域性變數

2: iload_0 //第乙個int型區域性變數進棧

3: iinc 0,1

//把乙個常量值加到乙個int型別的區域性變數上,0 表示區域性變數索引

6: ireturn //將運算元棧棧頂的值返回個此方法的呼叫者

linenumbertable:

line 5:0

line 6:2

public

static

intprint2()

; code:

0: iconst_0 //將int型別常量0壓入棧

1: istore_0 //將int型別值存入區域性變數

2: iinc 0,1

//把乙個常量值加到乙個int型別的區域性變數上,0 表示區域性變數索引

5: iload_0 //第乙個int型區域性變數進棧

6: ireturn //將運算元棧棧頂的值返回個此方法的呼叫者

linenumbertable:

line 5:0

line 6

:2i=i++到底是怎麼執行的

public

class

incvoid

fermin

(int i)

}//答案是0; inc.fermin(i); 是乙個干擾項,考值傳遞還是引用傳遞

i+=1 會進行自動進行型別轉換,相當於如下效果:

short i =1;

i=(short

)(i+1)

;

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

可能有很多程式設計師認為i 1只是i i 1的簡寫方式,其實不然,它們乙個使用簡單賦值運算,乙個使用復合賦值運算,而簡單賦值運算和復合賦值運算的最大差別就在於 復合賦值運算子會自動地將運算結果轉型為其左運算元的型別 看看以下的兩種寫法,你就知道它們的差別在哪兒了 1 byte i 5 i 1 2 b...

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...