我在这里遇到了一件有趣的事情。这不是问题,我只是对优先顺序感到好奇。让我们转到代码:
我在同一个类上有这两个方法:
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, String[]
而第5行的method1
收到String, String
理论上它们会收到相同的method1("someString", new String[]{"someString"});
参数,如果我想在第二个参数上只传递一个字符串到两个方法。
我知道在这个场景中,只用一个字符串作为第二个参数来调用第1行的特定方法,我必须做{{1}}
我想知道这个优先顺序调用是否有任何解释(或文档)。这就像是:
“在具有相同参数的方法定义中,其中一个方法接收一个对象而另一个方法是同一个对象的数组,如果只传递一个参数,那么执行它的方法将是只接收一个对象的方法而是接收该对象的数组的那个“
答案 0 :(得分:2)
我认为答案可以在15.12.2. Compile-Time Step 2: Determine Method Signature中找到:
可能有多种这样的方法,在这种情况下最多 选择特定的一个。描述符(签名加返回类型) 最具体的方法是在运行时使用该方法来执行该方法 调度。
仔细阅读并查看examples以获得更好的解释。