Lorsque vous transformez vous-même le premier argument en objet, le compilateur fait correspondre la méthode sans utiliser l'autoboxing (JLS3 15.12.2) :
La première phase (§15.12.2.2) effectue la résolution de surcharge sans permettre la conversion par boitage ou débitage, ou l'utilisation de l'utilisation de méthodes d'arité variable invocation de méthodes d'arité variable. Si aucune méthode applicable n'est est trouvée pendant cette phase, le le traitement se poursuit au deuxième phase.
Si vous ne le castez pas explicitement, il passera à la deuxième phase en essayant de trouver une méthode correspondante, permettant l'autoboxage, et alors il est effectivement ambigu, parce que votre deuxième argument peut être assorti d'un booléen ou d'un objet.
La deuxième phase (§15.12.2.3) réalise la résolution de surcharge tout en permettant l'encapsulation et la désencapsulation, mais exclut toujours l'utilisation de l'arité variable pour l'invocation de méthodes.
Pourquoi, dans la deuxième phase, le compilateur ne choisit-il pas la deuxième méthode parce qu'il n'est pas nécessaire d'effectuer un autocontrôle de l'argument booléen ? Parce qu'une fois qu'il a trouvé les deux méthodes correspondantes, seule la conversion de sous-type est utilisée pour déterminer la méthode la plus spécifique des deux, indépendamment de tout boxing ou unboxing qui a eu lieu pour les faire correspondre en premier lieu (§15.12.2.5).
Aussi : le compilateur ne peut pas toujours choisir la méthode la plus spécifique basée sur le nombre d'auto(un)boxing nécessaires. Cela peut encore donner lieu à des cas ambigus. Par exemple, ceci est toujours ambigu :
public class Test {
static void f(Object a, boolean b) {}
static void f(int a, Object b) {}
static void m(int a, boolean b) { f(a, b); } // ambiguous
}
Rappelez-vous que l'algorithme pour choisir une méthode d'appariement (étape 2 de la compilation) est fixé et décrit dans le JLS. Une fois dans la phase 2, il n'y a pas d'autoboxing ou de unboxing sélectif. Le compilateur va localiser todo les méthodes qui sont accessibles (les deux méthodes dans ces cas) et applicables (à nouveau les deux méthodes), et ensuite seulement choisit la plus spécifique sans regarder le boxing/unboxing, qui est ambigu ici.