java – 优先级方法调用顺序

我在这里遇到了一件有趣的事情.这不是问题,我只是对优先顺序感到好奇.让我们去代码:

我在同一个类上有这两个方法:

1-    public void method1(String a, String...b){
2-        System.out.println(a + "===" + b[0]);
3-    }
4- 
5-    public void method1(String a, String b){
6-        method1(a, b);
7-    }
8-
9-    public static void main(String[] args) {
10-       Teste t = new Teste();
11-       t.method1("a", "b");
12-   }

在这里运行测试我看到对第11行的method1的调用将调用第5行定义的method1然后它将进行自调用,因此是java.lang.StackOverflowError.我的问题是关于theese方法的优先顺序调用,因为第1行的method1接收一个String,第5行的String []和method1接收一个String,理论上如果我想传递一个字符串,它们会收到相同的参数两个方法的第二个参数.

我知道在这个场景中,只用一个字符串作为第二个参数调用第1行的特定方法,我将不得不做method1(“someString”,new String [] {“someString”});

我想知道这个优先顺序调用是否有任何解释(或文档).这就像是:

“在具有相同参数的方法定义中,其中一个方法接收一个对象而另一个方法是同一个对象的数组,如果只传递一个参数,那么执行它的方法将只接收一个对象而不是一个接收该对象的数组“

最佳答案 我认为答案可以在
15.12.2. Compile-Time Step 2: Determine Method Signature找到:

There may be more than one such method, in which case the most
specific one is chosen. The descriptor (signature plus return type) of
the most specific method is one used at run time to perform the method
dispatch.

仔细阅读并查看examples以获得更好的解释.

点赞