在程序員生涯中,更多IT技術乾貨歡迎大家鎖定"朗妹兒"公眾號每天都有更新哦~我們在編寫代碼時,時常會用到 ++ 和 --, 對於這些特殊的運算符的含義和用法,你是否真明白這些運算符的含義?
在編碼過程中,我們經常會使用 i=i+1(或則 i=i-1 )。
i=i+1; // 表示 變量 i+1的值重新賦值給變量 i(也就是 i 自動增加 1 );
i=i-1; // 表示 變量 i-1的值重新賦值給變量 i(也就是 i 自動減 1 );
在編程語言中存在著一種特殊的運算符,
自增運算符(++) 和 自減運算符(--),這種特殊的運算符則用來表示 變量的 自增 1 或則 自減 1。
例如:
i++ 則表示 i=i+1 (也可以把i++ 看做為 i=i+1的簡寫方式)
i-- 則表示 i=i-1 (也可以把i– 看做為 i=i-1的簡寫方式)
自增(++): 將變量的值加1,它分為 前綴式( 如 ++i )和 後綴式( 如 i++ )自減(--): 將變量的值減1,它分為 前綴式( 如 --i )和 後綴式( 如 i-- )
運算符采用 前綴式和後綴式 對本身的影響都是一樣的,都是加1或者減1。(也就是說: ++i 和 i++ 都表示 i=i+1)
但是 當把他們作為其他表達式的一部分,兩者就有區別了 。如:前綴式: j = ++i 表示先運算,再賦值。後綴式: j = i++ 表示先賦值,再運算。
先看一段代碼(前綴式)
再看一段代碼(後綴式)
自減(--)作為 其他表達式的一部分與 自增(++) 一樣,這裡我就不重複舉例了。
再看看下面這段代碼
這段代碼運算後 i=?, j=?, k=?
答案為: i=10, j=22, k=22
如果你回答正確了,那說明你對 自增(++)和 自減(--) 運算符 已經算是掌握了。
分析一下上面的代碼
最後得出答案為:i=10, j=22,k=22;
再問一個問題?
下面這段代碼能編譯通過嗎?
如果你回答可以,那麼你已經掌握了 自增(++) 和 自減(--)運算符了。
答案為: f=2.1 d=3.1 c=b。
自增與自減運算符還遵循以下規律 :
1. 可以用於整數數據類型byte、short、int、long,浮點類型float、double,以及字符類型 char。
2. 在Java5.0及以上版本中,它們可以用於基本類型對應的包裝器類Byte、Short、Integer、Long、Float、Double、Character。
3. 它們的運算結果的類型與被運算的變量的類型相同。
關於面試題
來看看面試題的代碼:
也許你的第一反應和我一樣, j=100;
結果答案: j=0 ;
原來這是因為Java編譯器使用了中間緩存變量的機制
java的編譯器在遇到i++和i–的時候會重新為變量運算分配一塊內存空間,以存放原始的值,而在完成了賦值運算之後,將這塊內存釋放掉。
首先看一下如果是 j = i++ 的情況:
所以上圖的操作等於如下操作
我們再看看 j = j++ 的情況
所以 最後一次循環後的 j 還是等於 0;
因此對於自增(++)、自減(--)運算符的變量進行賦值時都需要特別注意。
如果在程序中只輸入i++就不會出現這個方面的問題,所以大家在以後的程序中如果使用到i=i++的時候要格外小心,一般只需要用 i++ 就不會有問題了。
閱讀更多 全階魔方 的文章