笔试经典

前几天去一个软件公司面试,期间面试官让我做了几道笔试题,有一道印象比较深刻!

 

public class Test {
public static void test(Object obj){
System.out.println("one");
}

public static void test(Object[] objs){
System.out.println("two");
}
public static void main(String[] args) {
test(null);
}

// public static void main(String[] args) {
// main(null);
// }

}

 

  求:该程序输出的结果!? 

  答案:Two

 

很惊讶吧!   

 

如果把代码改成这个样子,再看看结果

public class Test {
public static void test(Object obj){
System.out.println("one");
}

//public static void test(Object[] objs){
// System.out.println("two");
//}
public static void main(String[] args) {
test(null);
}

// public static void main(String[] args) {
// main(null);
// }

}

 

结果是:one

 

 

很神奇吧?!

 

其实,这里涉及到了参数的调用关系!

 1. 任意一个可为空的值类型都可以与 Object 共存,而不会被认为是错误的不明确的重载,但是 Object 永远不会被调用
2. String、DateTime等无法与其他非 Object 类型作为两个重载,会产生不能明确调用的错误
3. 整型(Int16/Int32/Int64)和浮点数(Single/Double)可以共存,优先级和大家想的一样,整型优先于浮点,小的优先于大的
4. 特殊的数字类型 Decimal 可以与整型共存,而优先级低于整型,但无法与浮点数共存
 
 
很惊讶吧!我也想不到,好好想想吧!

 

posted @ 2015-04-17 20:21  逍遥神  阅读(141)  评论(0编辑  收藏  举报