前几天去一个软件公司面试,期间面试官让我做了几道笔试题,有一道印象比较深刻!
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 可以与整型共存,而优先级低于整型,但无法与浮点数共存
2. String、DateTime等无法与其他非 Object 类型作为两个重载,会产生不能明确调用的错误
3. 整型(Int16/Int32/Int64)和浮点数(Single/Double)可以共存,优先级和大家想的一样,整型优先于浮点,小的优先于大的
4. 特殊的数字类型 Decimal 可以与整型共存,而优先级低于整型,但无法与浮点数共存
很惊讶吧!我也想不到,好好想想吧!