標籤:java語言 編譯 print 操作 ring 錯誤 自動 規則 運算式求值
1.運算式中的自動型別提升:
運算式求值時,Java自動的隱含的將每個byte、short或char運算元提升為int類型,這些類型的封裝類型也是可以的。
例如:short s1 = 1;
s1 = s1 + 1;
s1+1運算中的運算元s1會被自動提升為int類型,s1+1運算結果會成為int類型,再賦值給short類型的s1時,編譯器會報告需要強制轉換類型的錯誤。需要改為short s1=1; s1=(short)(s1+1);結果就是short類型。
例如:short s1 = 1;
s1 += 1;
+=是java語言中的運算子,Java編譯器會對它特殊處理進行正確的編譯。
2.型別提升規則:
byte、short和char類型的值都被提升為int類型;
如果有一個運算元是long類型,就將整個運算式提升為long類型;
如果有一個運算元是float類型,就將整個運算式提升為float類型;
如果任何一個運算元為double類型,結果將為double類型。
例如:
byte b=1;
char c=‘a‘;
short s=1024;
int i=50;
float f=2.0f;
double d=.123;
double result = (f * b) + (i / c) - (d * s);
f*b中,b被自動提升為float類型,該運算式結果是float類型;
i/c中,c被自動提升為int類型,該運算式結果是int類型;
d*s中,s被自動提升為doubl類型,該運算式結果是double類型;
最後,float+int-double,結果會被提升為double類型,double類型為最後結果result的類型。
3、測試一個int類型資料與float資料運算後,測試結果是什麼類型
public class Test { public void test(float f) { System.out.println("float"); } public void test(double d) { System.out.println("double"); } public void test(int i) { System.out.println("int"); } public static void main(String[] args) { Test t = new Test(); int i = 10; float f = 10f; t.test(f * i); }}
最後結果顯示為float類型
關於Java運算中類型自動提升的問題