Java 为什么我可以将null作为参数传递给方法,而null不是接受参数的实例?
这个例子把我弄糊涂了。Java 为什么我可以将null作为参数传递给方法,而null不是接受参数的实例?,java,Java,这个例子把我弄糊涂了。instanceTest方法只接受Comparable。null不是对象,不能是Comparable的实例。但是将null传递给instanceTest是编译的,甚至可以执行。为什么?更令人困惑的是,我可以创建一个指向null的可比较对象comp。instanceof与comp instanceof Comparable一起失败,但我无法将对象转换为另一种不可比较的类型。显然instanceof检查对象,但不检查引用?但是引用还包含一些关于它的类型的信息?那么,有没有办法检
instanceTest
方法只接受Comparable。null
不是对象,不能是Comparable的实例。但是将null传递给instanceTest
是编译的,甚至可以执行。为什么?更令人困惑的是,我可以创建一个指向null
的可比较对象comp
。instanceof
与comp instanceof Comparable
一起失败,但我无法将对象转换为另一种不可比较的类型。显然instanceof检查对象,但不检查引用?但是引用还包含一些关于它的类型的信息?那么,有没有办法检查引用的类型 美国
空引用始终可以进行加宽引用转换
指向任何引用类型
其中定义为
存在从任何引用类型到的加宽引用转换
任何参考类型T,前提是S是T的子类型(§4.10)
因此,尽管null
不是类型Comparable
的实例(它根本不是实例,它是引用),但它可以用来代替类型Comparable
(或任何其他引用类型)的引用
那么,有没有办法检查引用的类型
您已经在使用
==
和instanceof
进行此操作。此答案很好地总结了null:
public static String instanceTest(Comparable cmp) {
if (cmp == null) {
return "null";
}
else return cmp.toString();
}
public static void main(String[] args) {
Comparable comp = null;
//comp = new FileReader(""); cannot be converted
System.out.println(null instanceof Comparable);
System.out.println(comp instanceof Comparable);
System.out.println(instanceTest(null));
}