java編譯器常量優(yōu)化機制

請看兩種代碼

一、

byte a1=1,a2=2,a3,a4;

a3=a1+a2;

a4=1+2;

這段代碼有沒有問題,有問題的話出在第幾行,為什么有問題,怎樣改?

解答:

代碼有問題,原因如下

1. 第2行,a3=a1+a2,Java中,byte short char在計算時將會被轉為int類型,a1+a2這個變量是int類型的,將其賦值給a3必定編譯出錯;

2. 第3行正確,Java有常量優(yōu)化機制,在編譯時已經(jīng)把1+2的結果即3賦給了a4,雖然在java中常量整形的默認數(shù)據(jù)類型是int,浮點形的默認數(shù)據(jù)類型是double,但也可將其賦值給byte short,只是當常量的值在被賦給變量數(shù)據(jù)類型范圍之外時,打印該變量時的結果不對,

(所謂常量優(yōu)化機制,即編譯器在編譯時先判斷表達式右側是否都是常量 如果都是常量則在編譯階段就先將常量的運算結果計算出來 然后直接賦值給左側變量 而不是在運行時再計算賦值)


byte test1=128;

System.out.println(test1);

Console輸出:

-128

二、

byte a=1;

a++;

a+=1;

a=a+1;

這段代碼有沒有錯誤,如果有,錯誤在哪里,為什么出錯,怎么改?

答案:

有錯誤,錯誤在第4行

原因:

1.第4行代碼a+1為int類型的變量,將其賦值給a(byte類型)會編譯出錯

2.第2、3行代碼沒有錯誤,a+=1;相當于a=(byte)(a+1);,a++;會自動轉換變量類型

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Advanced Language Features 知識點:一. static修飾符 static修飾符可以用來...
    風景涼閱讀 510評論 0 0
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,383評論 0 17
  • 傳送門 解讀阿里Java開發(fā)手冊(v1.1.1) - 異常日志 前言 阿里Java開發(fā)手冊談不上圣經(jīng),但確實是大量...
    kelgon閱讀 4,467評論 4 50
  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,723評論 4 12
  • 互聯(lián)網(wǎng)發(fā)達的今天,智能手機變成了我們生活中的一部分,既方便又節(jié)省時間,所以,人們喜歡把部分業(yè)務轉到了線上交易,如購...
    e代新視覺閱讀 735評論 0 0

友情鏈接更多精彩內容