關於Java運算中類型自動提升的問題


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM