一: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)