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
。
答案 0 :(得分:9)
这是Java Puzzler#68 - 它应该始终打印Result 2
。引用:
事实证明,在这些情况下,有一条规则可以控制程序行为。当一个 变量和类型具有相同的名称,并且两者都在范围内,变量名称采用 优先顺序[JLS 6.5.2]。据说变量名称模糊了类型名称[JLS 6.3.2]。同样的, 变量和类型名称可能会模糊包名称。这条规则确实模糊不清 依赖于它的程序可能会使读者感到困惑。