【发布时间】:2012-03-10 19:46:07
【问题描述】:
示例代码为:
public class OverloadingTest {
public static void test(Object obj){
System.out.println("Object called");
}
public static void test(String obj){
System.out.println("String called");
}
public static void main(String[] args){
test(null);
System.out.println("10%2==0 is "+(10%2==0));
test((10%2==0)?null:new Object());
test((10%2==0)?null:null);
}
输出是:
调用的字符串
10%2==0 为真
对象调用
字符串调用
第一次调用test(null) 调用带有String 参数的方法,根据The Java Language Specification 可以理解。
1) 谁能解释我在前面的调用中调用test() 的依据是什么?
2) 当我们再次输入 if 条件时:
if(10%2==0){
test(null);
}
else
{
test(new Object());
}
它总是调用带有String 参数的方法。
编译器会在编译时计算表达式(10%2) 吗?我想知道表达式是在编译时还是运行时计算的。谢谢。
【问题讨论】:
-
test((10%2==0)?null:null; 最后一行需要关闭 ) 并且main方法没有关闭。
标签: java static-methods overloading