3 回答

TA貢獻1794條經驗 獲得超8個贊
整型文字(如1
)是 type 的表達式int
。
重載解析分多個階段進行,尋找可以接受您傳遞的類型的參數的方法。
如果存在單個重載,其中實際參數與形式參數具有相同的類型,則調用該重載。
如果存在單個非可變參數重載,其中實際參數可以自動轉換(例如通過加寬或取消/裝箱)為與形式參數相同的類型,請調用它。
如果存在單個可變參數重載,其中實際參數可以自動轉換為與調用它的形式參數相同的類型。
否則,錯誤。
這些階段依次應用,一直持續到找到匹配項。
由于存在過載m1
這需要int
,匹配在階段1中發現,使值的另一種類型,需要的不是轉換發生。

TA貢獻1811條經驗 獲得超4個贊
根據定義,該原始文字的類型為 int。任何沒有小數點的數字文字都是int類型,除非您將 al/L 放入其中:1L
將其轉換為 long。沒有 1 個“字節”文字,你必須去(byte) 1
那里。
編譯器尋找最合適的,并使用該方法接受一個 int。
這就是全部。如果您想查看要調用的其他方法,例如將值轉換為 (long),或者開始使用諸如 1.0 而不是 1 之類的值。
關于您的評論:只有在需要時才會出現自動化。但在您的情況下:A) 您使用的是int值 B) 有一個 int-taking 方法。編譯器不會無緣無故地將整數轉換為長整數!

TA貢獻1757條經驗 獲得超7個贊
自動轉換僅在方法接受比輸入更寬的類型時發生。例如,如果您刪除void m1(..)
除long
版本之外的所有功能。然后可以傳入一個整數,整數會自動加寬為long。
在您的示例中,有一個接受整數的方法,因此 java 將改用該方法,并且不會發生擴大。
添加回答
舉報