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類型