JAVA中類型轉換

一:java中類型轉換圖

備註:

1.默認整型爲 int

2.默認浮點型 double

public static void main(String[] args) {
        long a = 10000000000; //編譯出錯: The literal 10000000000(默認是int 範圍出界) of type int is out of range 
        long b = 10000000000L; //編譯正確(改變默認 末尾加L)
        int c = 1000;
        long d = c;
        float e = 1.5F;
       <span style="white-space:pre">	</span>double f = e;(默認是double)
  }
3.由於範圍的問題 byte不能自動提升到char ,char不能自動提升到short

二:隱含類型轉換與強制類型轉換

隱含類型轉換

1.將一個範圍較小的類型賦值給範圍大的類型,jvm自動在編譯時進行類型提升

2.將一個範圍較大的類型賦值給範圍小的類型N

case 1:默認爲int   超過當數值範圍N時編譯出錯,此時你需要強制類型轉換

低於數值範圍N時,隱式轉換爲類型N(虛線處)

public static void main(String[] args) {
     byte a = 1000;   // 編譯出錯 Type mismatch: cannot convert from int to byte
     float b = 1.5;   // 編譯出錯 Type mismatch: cannot convert from double to float
     byte c = 3;      // 編譯正確
   }
強制類型轉換


public static void main(String[] args) {
        byte p = 3; // 編譯正確:int到byte編譯過程中發生隱式類型轉換
       <span style="white-space:pre">	</span>int  a = 3;
        byte b = a; // 編譯出錯:cannot convert from int to byte
         byte c = (byte) a; // 編譯正確
         float d = (float) 4.0;
     }

三:float及double運算(float和double只能用來做科學計算或者是工程計算; 在商業計算中我們要用java.math.BigDecimal

四:經典題目分析

Q1:short s1 = 1;  s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

對於short s1 = 1; s1 = s1 + 1; 由於s1+1運算時會自動提升表達式的類型,所以結果是int型,再賦值給short類型s1時,編譯器將報告需要強制轉換類型的錯誤。

對於short s1 = 1; s1 += 1;由於 += 是java語言規定的運算符,java編譯器會對它進行特殊處理,因此可以正確編譯。

Q2:if(userName.equals("hh")){}問題?

當userName爲null 時 報空指向異常,改爲"hh".equals(userName)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章