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

來源:互聯網
上載者:User

標籤: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運算中類型自動提升的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.