5
public class Main {
    public static void main(String[] args){
        System.out.println(X.Y.Z);
    }
}

class X {
    static class Y {
        static String Z = "Result 1";
    }
    static C Y = new C();
}

class C {
    String Z = "Result 2";
}  

いつか出力は"Result 1"であり、いつか出力は"Result 2"です。理由を説明できますか?

私はを使用してJDK 1.6_33います。

4

1 に答える 1

9

これはJavaPuzzler#68です-常に印刷する必要がありますResult 2。引用:

このような状況でのプログラムの動作を管理するルールがあることがわかりました。変数と型が同じ名前で、両方がスコープ内にある場合、変数名が優先されます[JLS6.5.2]。変数名は型名を覆い隠すと言われています[JLS6.3.2]。同様に、変数名と型名はパッケージ名を覆い隠す可能性があります。この規則は確かにあいまいであり、それに依存するプログラムは読者を混乱させる可能性があります。

于 2012-08-31T22:49:31.167 に答える