你知道i=i++;的含义吗?原理其实没有你想的那么简单
i++和++i我們都知道,但是你知道i=i++;嗎?
自上學時,老師就說i++是先賦值再加,而++i是先加再賦值,比如我們寫個代碼舉下例子:
i++:
/*** 自增案例*/public?static?void?testZiZeng(){int?i = 1;int?a = i++;System.out.println("a="+a);System.out.println("i="+i);}其運行結果是:
++i:
public?static?void?testZiZeng(){int?i = 1;int?a = ++i;System.out.println("a="+a);System.out.println("i="+i);}其運行結果為:
a=2 i=2運行結果解釋:
i的值沒的說,不管是++i還是i++,都是在原來值的基礎上自身加1,這個很好理解,不好理解的是a的值:
第一個案例中,a = i++;相當于是這樣的,a = i,i++,那么a的值自然就是1了。
第二個案例,a = ++i,相當于i先++(此時i從1變成了2),然后在將i的值賦值個a,那么a自然而然也就成2了。
這一部分理解了,我們接著看下一個i=i++;
某天,給學生們寫了一段代碼:
public?static?void?testZiZeng(){int?count = 0;for(int?i = 0;i<10;i++){count = count++;}System.out.println("count="+count);}代碼寫完之后,問:“誰知道count的值是多少?”
王同學和劉同學在簡單計算之后爭相往起站:“老師,是10”,其他人也附和“沒錯,是10”,“對,就是10”……大家都陸陸續續的說出了自己心中的正確答案。
“小點聲,你們說的是錯的!別這么大聲……”看著大家這么積極的回答,我不忍心的勸說道。
于是大家都用驚愕的眼神看著我,眼神里仿佛寫著,十萬個為什么。
其實正確答案是:
(點擊空白處查看答案)
▼
count=0
接下來我們分析一下為什么?
點點下面的小卡片就是對我莫大的支持,謝過啦~
count++是一個表達式,是有返回值的,它的返回值就是count自加前的值,Java對自加是這樣處理的:首先把count的值(注意是值,不是引用)拷貝到一個臨時變量區,然后對count變量加1,最后返回臨時變量區的值。
用代碼解釋為這樣的:
int?temp = count; //先把i變量的值10保存到臨時變量中 count = count+1; // i變量的值加1操作 count = temp; //再把臨時變量中的值賦值給i程序第一次循環時的詳細處理步驟如下:
?JVM把count值(其值是0)拷貝到臨時變量區。
?count值加1,這時候count的值是1。
返回臨時變量區的值,注意這個值是0,沒修改過。
返回值賦值給count,此時count值被重置成0。
知道為什么了吧!
老師,我沒有學過事務……同學你過來,你看老師手里拿的是什么?
2020-06-11
sql server高級查詢,看這篇文章就夠了
2020-06-09
Linux基礎知識之【簡介與安裝】
2020-06-08
教你2分鐘永久激活win10系統手慢無……
2020-06-03
3分鐘內看完這,bootstraptable表格控件,受益匪淺!
2020-06-02
覺得好看,點擊這里
總結
以上是生活随笔為你收集整理的你知道i=i++;的含义吗?原理其实没有你想的那么简单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3000组装机打游戏配置推荐2021不带
- 下一篇: 什么?java中居然可以执行js代码了?