public void getData(Object o[]) {
System.out.println("In Side Array");
}
public void getData(Object o) {
System.out.println("In Side Object");
}
public static void main(String[] args) {
new JavaEx().getData(null);
}这里是打印数组块为什么,为什么不打印对象块?
发布于 2015-09-11 16:54:50
两个getData方法都可以处理null参数。在这种情况下,Java会尝试选择处理更具体类型的方法。
根据定义,Object是所有Java类的超类,因此在这种情况下,Object[] (也是一个Object)是更具体的类型,而getData(Object o[])是更具体的方法。这就是Java选择这种方法的原因。
发布于 2015-09-11 17:09:53
根据JLS(Java Language Specification)确定方法签名时间
在您的示例中:
当您通过传递参数
null来调用方法getData()时,编译器转到第一阶段,在不执行任何装箱的情况下找到方法签名。
因此输出是"In Side Array"
发布于 2015-09-11 17:11:39
https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5
“如果多个成员方法既可访问又适用于方法调用,则必须选择一个成员方法来为运行时方法调度提供描述符。Java编程语言使用的规则是选择最具体的方法。
非正式的直觉是,如果第一个方法处理的任何调用可以传递给另一个方法,而不会出现编译时类型错误,则一个方法比另一个方法更具体。
https://stackoverflow.com/questions/32518471
复制相似问题