Parce que heureusement le compilo n'a pas à préférer une méthode à une autre car il ne sait pas si toi tu voulais utiliser la première ou la seconde méthode !!!
pour lever l'ambiguité il faut que tu forces les types :
Code:
afficher(s, (double) s);
ou
Code:
afficher((int) s, (int) s);
Il n'y a aucune considération de mémoire, les explications ci-dessus sont incorrectes. Le compilo va choisir la méthode la plus ressemblante quand c'est possible et qu'il n'y a pas d'ambiguité.
Code:
1 2 3 4
| methode1(s, i);
public void methode1(int a, int b){...}
public void methode1(int a, double d) {...} |
c'est la première méthode qui sera choisie car il n'y a qu'une seule transformation a faire (short vers int) car le second type est de type int et qu'il l'a à disposition.
Si tu fais :
Code:
methode1(s, (double) i);
Il va choisir la deuxième.