int** 赋值_关于Java语言复合赋值运算符的两个问题,快来瞧瞧
短文漲姿勢,看了不白看,不關注等啥?
我們知道,在Java以及很多高級編程語言當中,都有一種運算符叫做復合賦值運算符。復合賦值運算符由兩個符號組成,它所能完成的運算操作也分為兩步:第一步是運算,第二步是賦值。比如說:
上面的這兩條語句相當于
但是,如果碰到下面這樣的情況,a的值該應該是多少呢?
有人認為應該按以下方式來計算,因為我們都知道,在四則運算規則中,遵循“先乘除,后加減”的原則
按照這樣的方式來計算,得到a的值應該是7,但實際運行程序所得到的結果是8。這是為什么呢?
就是因為復合賦值運算符在完成運算的時候,遵循一個規則:把“=”右邊當作整體!也就是說,剛才的運算和賦值操作應該被解釋為以下形式
因此,按照這種方式,“=”右邊的“3+1”應該被當作整體,優先進行運算,所以得到的最終計算結果就是變量a的值為8。
我們再來看另外一個問題,這一次,我們把變量a的類型由原來的int改為short。
我們這么寫代碼沒有任何問題,能夠順利通過編譯。但是,如果我們沒有使用復合賦值運算符,而是按如下所示的方式編寫代碼
在這種情況下,大家可以看到代碼不能通過編譯。我們把一個算術表達式的運算結果賦值給byte或者是short類型的變量,有時候會引起編譯錯誤,所以按這種方式寫代碼會導致編譯錯誤。關于引起這種錯誤的原因,大家可以看我的另一篇文章《Java語言中為byte和short類型變量賦值為啥會報錯?看完秒懂》,該文對此現象有詳細解釋。我們現在重點討論使用復合賦值運算符進行操作的時候,同樣會有給short類型變量賦值的操作,為什么就不報錯呢?原因就是:使用復合賦值運算符在對變量進行賦值的時候,編譯器會“暗地里”加上一個強制類型轉換的操作。也就是說,使用復合賦值運算符進行操作的時候,實際上等同于如下寫法
這種強制類型轉換,其實有可能讓我們的程序在不經意間產生莫名其妙的錯誤,請看下面的例子
這一次,我們把a的初始值由原來的2改成了20000,并且在代碼中還加入了輸出a的語句,那么,輸出結果會是多少呢?首先來講,這段代碼并沒有報錯,那么這個輸出結果會讓人很多人大吃一驚,它并不是我們想象的80000,而是竟然輸出了14464!
之所以會輸出這樣的結果,就是因為80000已經超出了short類型數據的最大值,而我們強制把這個已經超過最大值的“80000”經過強制類型轉換賦值給short變量,就會產生“溢出”,最終導致實際賦給變量a的是一個錯誤的值!最可惡的是,因為是強制類型轉換之后進行的賦值,所以編譯器并不報錯,從而導致很多人掉到坑里還不知道!
通過這個篇文章,大家可以看到:一個簡單的復合賦值運算符竟然也“暗藏殺機”,我們平時編程一定要小心哦!
看短文,漲姿勢,如想系統學習Java編程,點擊下方的“了解更多”即可,不讓你進去,用QQ登錄就可以啦!有問題也可以加入我的QQ群一起討論!
總結
以上是生活随笔為你收集整理的int** 赋值_关于Java语言复合赋值运算符的两个问题,快来瞧瞧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 本地提醒功能,andro
- 下一篇: Hive的安装和使用以及Java操作hi