4

It is a basic question, but I couldn't get a the proper answer. I am thinking it is because of primitive types auto type casting

Why would the below statement invokes the print(int x) method and not print (char x) method.

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);
    }


}
4

3 に答える 3

6

このメソッド呼び出しの変換に使用できる変換は、拡張プリミティブ変換です。

byte から short、int、long、float、または double

short から int、long、float、または double

char から int、long、float、または double

int から long、float、または double

フロートまたはダブルまで長い

float から double

bytetocharパスがないことがわかります。これは優先事項ではありませんint。 as パラメーターを取る関数を削除すると、コードはコンパイルされません。

于 2013-04-04T10:21:52.223 に答える
2

byteしないに自動変換しintますchar

 primitive types are called the widening primitive conversions:    

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

参照リンクセクション 5.1.2

于 2013-04-04T10:22:27.470 に答える
0

コンパイラはこの方法でオーバーロードされたメソッドを選択します

byte->short->int->long

興味深いことに、そのままにしておくと、print(char x)コンパイラ エラーが発生します。

チャーの場合は

char->int->long
于 2013-04-04T10:24:14.667 に答える