【Java】探究自增运算符++的原理
薦讀
C語言里++能隨便用嗎
j=j++到底是什么
a++ + ++a到底是什么
i++與++i
看下面的兩組代碼:
public class IntegerPlusTest {public static void main(String[] args) {int i = 1;System.out.println(i++);} } public class IntegerPlusTest {public static void main(String[] args) {int i = 1;System.out.println(++i);} }其實打了反匯編以后看看這兩份Code,信息是一樣的。
其實想想也合理,畢竟C/C++都可用++,更何況Java,肯定都封裝好了啊!
從結果上說,二者分別輸出1, 2,如果按照剛剛學習編程的理解來看,我們一般被告知這樣一件事:
i++先加1后執行,++i先執行后加1。
其實這樣是不對的,如果有先后順序的話,循環中使用j=j++,j的值就會變了,可惜沒變。
那篇文章中我大致提出一種設想,即i++、++i分別是兩個是底層內置函數,基本可以認為是原子操作了,但原子操作可以使用代碼表示。這里就把這種想法展開成代碼說一下:
i++:
int function1(int i) {int j = i;i = i+1;return j; }++i:
int function1(int i) {return i+1; }之前一直聽ACMers說特別是很多次循環中, ++i 比 i++ 快一些,大概我們就能理解了。
絕不是一個先后順序的問題,而是 i++ 實際上多生成了一個變量,而且使用C函數模擬的話核心代碼行數是3:1,可見 i++ 稍復雜一些。
不過不需要超高效率的情況下,二者都差不多啦!
學會善用++
其實在讀很多比較np的代碼的時候,就發現Coder的位運算、三目運算符、++這種用的很爽。
沒錯,++的效率確實較高,能寫出更高效、更簡潔的代碼,還是值得研究的。
但我還是覺得不要濫用,像我舉的那兩種例子:
j=j++; j++ + ++j;這種寫法其實真的不必……
我想告訴一些在讀大學生:不要被你的老師隨便整的那種亂七八糟的題亂了心神,做題歸做題,掌握知識歸掌握知識,但平時可別一上頭就濫用一坨++,沒人看得懂。。。
其實好的大學應該是不會弄那么無聊的東西的吧
話說當時我院C++選修課,老師寫了一個i+++++i;,沒分隔,結果CE了,挺有趣的哈哈哈(絕對絕對絕對不是嘲笑老師,而是這確實不建議濫用)哈哈
總結
以上是生活随笔為你收集整理的【Java】探究自增运算符++的原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OJ】洛谷循环结构题单题解锦集
- 下一篇: 【Java】浅谈Java的GUI开发