Java復合賦值運算符(Compound Assignment Operators)


原文鏈接:https://clclcl.fun/2019/11/02/java/Compound-Assignment-Operators/

簡單介紹Java復合賦值運算符(+= -= *= /+ >= >>>= |= &=)中的類型轉換。

首先看一段代碼:

        int i = 10;
        long j = 100;
        i = i + j; //Compiling error: incompatible types: possible lossy conversion from long to int
        i += j; //Correct.
        System.out.println(i);

很多人(包括我自己)都簡單的把 i += j 理解為 i = i + j,那么為什么會出現上面的問題呢?這就得從java規范里,對+=這類復合賦值運算符的定義了。

什么是復合賦值運算符(Compound Assignment Operators)?

簡單來講,就是運算加賦值,譬如:
+= -= *= /+ >= >>>= |= &=,統一稱為op=.在Java規范里,這種運算符的效果是什么呢?
假設兩個變量,A,B,類型分別為TA,TB(當然可能是相同的類型),那么
A op= B 等效於A = (TA)(A op B).
這樣回頭去看上面的代碼,就很清楚問題的原因了:
i + j 由於類型的自動提升,結果為long類型,自然 i = i + jlong類型的值賦給int類型的變量會出錯。而i += j等效於i = (int)(i + j),對long類型的值做了強制轉換(cast to int).

Also see JAVA語言規范中關於復合賦值運算符 jls-15.2.26.2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM