添加到现有回复中,我不确定这是否是因为自问题以来的 Java 版本较新,但是当我尝试使用将整数作为参数而不是对象的方法编译代码时,代码仍然确实编译了。但是,以 null 为参数的调用在运行时仍然调用了 String 参数方法。
例如,
public void testMethod(int i){
System.out.println("Inside int Method");
}
public void testMethod(String s){
System.out.println("Inside String Method");
}
仍然会给出输出:
Inside String Method
当被称为:
test1.testMethod(null);
主要原因是因为 String 确实接受 null 作为值而 int 不接受。所以 null 被归类为字符串对象。
回到所问的问题,Object 类型仅在创建新对象时才会遇到。这是通过将 null 类型转换为 Object 来完成的
test1.testMethod((Object) null);
或将任何类型的对象用于原始数据类型,例如
test1.testMethod((Integer) null);
or
test1.testMethod((Boolean) null);
或者通过简单地创建一个新对象
test1.testMethod(new Test1());
应当指出的是
test1.testMethod((String) null);
将再次调用 String 方法,因为这将创建一个 String 类型的对象。
还,
test1.testMethod((int) null);
and
test1.testMethod((boolean) null);
将给出编译时错误,因为 boolean 和 int 不接受 null 作为有效值以及 int!=Integer 和 boolean!=Boolean。整数和布尔类型转换为 int 和布尔类型的对象。