优先级方法调用顺序

Jor*_*pos 5 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-   }
Run Code Online (Sandbox Code Playgroud)

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

我知道在这种情况下,要调用第 1 行的特定方法,并且仅使用一个字符串作为第二个参数,我必须这样做method1("someString", new String[]{"someString"});

我想知道这个优先顺序调用是否有任何解释(或文档)。这句话是这样说的:

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

Mar*_*oun 2

我想答案可以在15.12.2中找到。编译时步骤 2:确定方法签名

可能有不止一种这样的方法,在这种情况下选择最具体的一种。最具体方法的描述符(签名加返回类型)是在运行时用于执行方法分派的描述符。

仔细阅读并查看示例以获得更好的解释。