3

誰でもこれを説明できますか?

public class Test {
    public static void main(String[] args) {
        char c = 'A';
        int i = 0;
        boolean b = true;

        System.out.println(b ? c : i);
        System.out.println(b ? c : (char)i);

        System.out.println(b ? c : 0);
        System.out.println(b ? c : (char)0);
    }
}

出力:

65 あああ
_
_

私が立っている場所からは確かに奇妙に見えます。sだけAが印刷されると思っていました。さらに、出力の変更を置き換える0とどうなりますか? 出力は、 だけでなく、iのすべての値に対して同じようです。i0

4

2 に答える 2

5

リンゴとオレンジを選択したい場合は、そのうちの 1 つ (小さい方) を昇格させる必要があります。

public class Test {
  public static void main(String[] args) {
    char c = 'A';
    int i = 0;
    boolean b = true;

    System.out.println(b ? c : i);       // Promoted to int ---> 65
    System.out.println(b ? c : (char)i); // Not promoted ------> A (char vs char)

    System.out.println(b ? c : 0);       // Not promoted vs null/0
    System.out.println(b ? c : (char)0); // Not promoted vs char
  }
}

のような変数タイプがあった場合nibble、選択時に異なる出力は得られません。

System.out.println(b ? c : (nibble)i); // I know there is no nibble. :)
                                       // nibble promotes to char.
                                       // I know... there is no nibble.
                                       //so, output is A
于 2012-09-08T16:43:56.383 に答える
4

Java 言語仕様から、型変換と昇格について (太字のテキストを参照)

Java プログラミング言語で記述されたすべての式には、式の構造と、式で言及されているリテラル、変数、およびメソッドの型から推定できる型があります。ただし、式の型が適切でないコンテキストで式を記述することは可能です。場合によっては、これによりコンパイル時にエラーが発生します。それ以外の場合、コンテキストは式の型に関連する型を受け入れることができます。便宜上、プログラマが型変換を明示的に示す必要はなく、Java プログラミング言語は、式の型から周囲のコンテキストで受け入れられる型への暗黙的な変換を実行します。

コンパイル時に発生するケースの型変換は、出力を説明しています。

iが含まれていた場合は、c整数に昇格されました。

が関与した場合0、それは文字として扱われ、したがってc文字のままです。

于 2012-09-08T16:47:57.693 に答える