【发布时间】:2012-12-11 05:17:01
【问题描述】:
在下面的 java 示例中,谁能准确解释为什么程序的输出是“橙色”? (这是一道面试题)
public class Finder {
public static void main(String[] args){
System.out.println(X.Y.Z);
}
}
class X {
static W Y = new W();
static class Y {
static String Z ="Apple";
}
}
class W {
String Z = "Orange";
}
【问题讨论】:
-
X.Y这个表达式指向类X中定义的静态变量Y。Y类X中的变量是W类型的对象,因此,X.Y.Z必须是orange。要获得Apple,您必须使用new X.Y().Z -
这是一个讨厌的面试问题。请注意,
static W Y违反了变量的 Java 命名约定。 (static String Z类Y和String Z类W也是如此。)@t0mm13b - 声明的顺序与这种情况无关。 -
@TedHopp 你让我知道了,tbqh,之前在面试中从未被问过这个问题,但从阅读其他人的答案来看,这是一个非常讨厌的问题——公平地说,面试官的问题是什么观点?把自己想象成一个面试官,知道这个问题的陷阱——问题是,你会向潜在的候选人提出这个问题吗?它对现实世界有什么影响——如果在生产环境中发现了该代码,你一定是在开玩笑?
-
另外,我真的认为面试官是原谅我,拿了 p!ss,因为在面试之前谁会在他们的脑海中携带一个 java 规范.. .显然,@fgb 很容易立即搜索规范并发布一个很有启发性的答案 - 不要敲响回答者,公平地说,总结了我可以从面试官那里收集到的一件事,他/她失去了很多潜在的候选人,因为有这样的问题让某人大吃一惊!
-
即使是编译器作者也没有正确理解这些规则:bugs.sun.com/bugdatabase/…。我从来没有见过这样的代码,甚至在不应该做的例子中也没有。
标签: java