public static void main(String[] args) { System.out.println(fun(2,3,4)); } static int fun(int a,int b,int c) { return 1; } static int fun(int ... a) { return 0; } Output: 1Question: In the above case why does the function fun select the 1st function and not the second.On what basis is the selection done since there is no way to determine which fun the user actually wanted to call ?
4 Réponses :
Fondamentalement, il y a une préférence pour un appel spécifique. Outre toute autre chose, cela signifie qu'il est possible d'optimiser pour un petit nombre d'arguments, évitant de créer une matrice inutile à l'heure d'exécution. P>
Les JLS ne font pas cela très clair, mais c'est dans
compilateur sélectionne toujours la méthode précise lorsque ces types d'ambiguïtés sont rencontrés. Dans votre scénario Func avec trois arguments est plus précis que les arguments variables que l'on appelle ainsi. P>
EDIT: strong> édité selon le commentaire de Skeet. P>
Ce n'est pas le JVM qui décide cela - c'est le compilateur.
Si vous testez ces expressions: La sortie est p> Le compilateur Java vérifie d'abord pour une méthode dont la déclaration correspond au Paramètres exacts de l'invocation, et autrement, il recherche la correspondance de la méthode alternative. p> p>
Ce comportement permet la résolution de deux appels d'arguments variables surchargés:
addStates(){ addStates(new String[0]); }