【发布时间】:2013-05-12 03:38:53
【问题描述】:
鉴于此代码:
class Overloading
extends Object
{
static public void target(Object val, String chk) { System.out.println("Object["+val+"] :: Should be "+chk); }
static public void target(String val, String chk) { System.out.println("String["+val+"] :: Should be "+chk); }
static public void main(String[] args) {
Object obj=null;
target(null ,"Object");
target((Object)null,"Object");
target(obj ,"Object");
}
}
输出(意外)如下:
String[null] :: Should be Object
Object[null] :: Should be Object
Object[null] :: Should be Object
问题在于第一行,我希望它与其他两行相同。此外,我发誓直到最近编译器才会对普通的null 调用发出模棱两可的调用警告。但是,使用 Java 5 和 6 进行编译和测试会产生相同的结果。
这对我来说是一个重大问题,因为我有很多代码使用这种模式,即使用不同类型的重载“默认”参数来选择返回类型并推断所需的转换/解析。谁能解释这里发生了什么?
【问题讨论】:
-
这是相关的,但不是骗子。
标签: java overloading