JAVA Object/String方法重载

Adi*_*tya 23 java

出于好奇,我尝试了这个例子.

public class Class1 {

    public void method(Object obj){
        System.out.println("Object");
    }

    public void method(String str){
        System.out.println("String");
    }

    public static void main(String... arg){
        new Class1().method(null);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出为"String".我想知道JVM在什么基础上决定调用String作为参数而不是Object的方法.

Jon*_*oni 17

只要可以将多个重载方法应用于参数列表,就会使用最具体的方法.

在这种情况下,可以在传递时调用任一方法null,因为"null类型"可以分配给ObjectString.采用的方法String更具体,因此将被选中.


Red*_*ddy 10

每当存在方法重载时,JVM将搜索从最特定类型到最不特定类型的方法

  • 编译器决定应该调用哪个方法,而不是JVM. (4认同)
  • 我建议编辑你的"最接近"到"最具体类型"的引用在编程方面更合适. (2认同)

ver*_*tas 6

请参阅JLS规范

15.12.2.5.选择最具体的方法

它是Joshua BlochJava Puzzlers的难题之一- Puzzle 46: Confusing Constructor的案例