2013-04-04 78 views
4

這是一個基本問題,但我無法得到正確的答案。我想這是因爲原始類型自動類型鑄造字節類型轉換

爲什麼下面的語句調用print(int x)方法而不是print(char x)方法。

public class Overloading { 

    public static void main(String args[]) 
    { 
     byte b='x'; 
     print(b); 
    } 

    public static void print(int x) 
    { 
     System.out.println("Inside int Print "+x); 
    } 


    public static void print(char x) 
    { 
     System.out.println("Inside char Print "+x); 
    } 

    public static void print(float x) 
    { 
     System.out.println("Inside float Print "+x); 
    } 


} 

回答

6

可用於該method invocation conversion的轉化是一個widening primitive conversion

字節短,整型,長整型,浮點,或雙

短到int,長整型,浮點,或雙

炭爲int,長整型,浮點,或雙

INT到長整型,浮點,或雙

長浮動或雙

浮動翻番

你看有沒有bytechar路徑。這不是一個優先事項:如果您刪除以int作爲參數的函數,那麼您的代碼將無法編譯。

2

byte將自動轉換爲intchar

primitive types are called the widening primitive conversions:  

    byte to short, int, long, float, or double 

參考link 5.1.2節

0

編譯器選擇一個重載的方法這樣

byte->short->int->long 

有趣的是,如果你只離開print(char x)你會得到編譯器錯誤

對於字符它是

char->int->long