笔试经典

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

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 可以与整型共存,而优先级低于整型,但无法与浮点数共存
 
 
很惊讶吧!我也想不到,好好想想吧!
原文地址:https://www.cnblogs.com/ld1022/p/4435888.html