亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java中一種原始類型到另一種類型的轉換

java中一種原始類型到另一種類型的轉換

森林海 2021-08-25 11:07:51
在下面的一段代碼中  class Main {    void m1(double x){        System.out.println("double");    }    void m1(float x){        System.out.println("float");    }    void m1(long x){        System.out.println("long");    }    void m1(byte x){        System.out.println("byte");    }    void m1(short x){        System.out.println("short");    }    void m1(int x){        System.out.println("int");    }    public static void main(String[] args) {      Main m = new Main();         m.m1(1);    }}為什么輸出是“int”而不是“byte”或“long”或“short”或“float”或“double”?如果按照從“byte”->“short”->“int”->“long”->“float”->“double”的自動轉換,那么輸出應該打印“double”對嗎?( https://www.geeksforgeeks.org/type-conversion-java-examples/ )
查看完整描述

3 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

整型文字(如1)是 type 的表達式int

重載解析分多個階段進行,尋找可以接受您傳遞的類型的參數的方法。

  1. 如果存在單個重載,其中實際參數與形式參數具有相同的類型,則調用該重載。

  2. 如果存在單個非可變參數重載,其中實際參數可以自動轉換(例如通過加寬或取消/裝箱)為與形式參數相同的類型,請調用它。

  3. 如果存在單個可變參數重載,其中實際參數可以自動轉換為與調用它的形式參數相同的類型。

  4. 否則,錯誤。

這些階段依次應用,一直持續到找到匹配項。

由于存在過載m1這需要int,匹配在階段1中發現,使值的另一種類型,需要的不是轉換發生。


查看完整回答
反對 回復 2021-08-25
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

根據定義,該原始文字的類型為 int。任何沒有小數點的數字文字都是int類型,除非您將 al/L 放入其中:1L將其轉換為 long。沒有 1 個“字節”文字,你必須去(byte) 1那里。

編譯器尋找最合適的,并使用該方法接受一個 int。

這就是全部。如果您想查看要調用的其他方法,例如將值轉換為 (long),或者開始使用諸如 1.0 而不是 1 之類的值。

關于您的評論:只有在需要時才會出現自動化。但在您的情況下:A) 您使用的是int值 B) 有一個 int-taking 方法。編譯器不會無緣無故地將整數轉換為長整數!


查看完整回答
反對 回復 2021-08-25
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

自動轉換僅在方法接受比輸入更寬的類型時發生。例如,如果您刪除void m1(..)long版本之外的所有功能。然后可以傳入一個整數,整數會自動加寬為long。

在您的示例中,有一個接受整數的方法,因此 java 將改用該方法,并且不會發生擴大。


查看完整回答
反對 回復 2021-08-25
  • 3 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號