6

scjpの準備本でこの1つの質問を見ました。

public class Yikes {
    public static void go(Long n) {
        System.out.println("Long ");
    }
    public static void go(Short n) {
        System.out.println("Short ");
    }
    public static void go(int n) {
        System.out.println("int ");
    }
    public static void main(String [] args) {
        short y = 6;
        long z = 7;
        go(y);
        go(z);
    }
}

出力はint Longです。

shortオーバーロードされたメソッド go にデータ型変数を渡しています。現在、go にはshortデータ型バージョンもあります。では、どうしてint呼び出されているのですか?この動作の理由は何ですか?

私はJavaでかなり新しいです。だからここで私を助けてください。

4

1 に答える 1

9

選択する方法がないためgo(short s)、Java は別の方法を選択する必要があります。これには、次の 2 つの方法があります。

  1. 拡幅、 を 拡幅shortするint
  2. 対応するラッパー クラスshortであるで囲まれたAutoboxing 。Short

ワイドニングはオートボクシング(Java 5 で導入)よりも長く使用されているため、JVM はこの代替手段が利用可能であれば最初に選択します。

したがって、go(int n)メソッドが呼び出されます。

于 2012-08-26T13:46:14.877 に答える