Salut,

Soit le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
public class Test {
   public static void main(String[] args) {
      int a = 5;
      Integer b = a;
      System.out.println(a);
      Double c = a;
      System.out.println(c);
   }
}
Le compilateur me retourne une erreur a la declaration de c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
$ javac Test.java 
Test.java:6: incompatible types
found   : int
required: java.lang.Double
      Double c = a;
                 ^
1 error
$
Je me disais qu'un int etant plus petit qu'un double (le primitif), il y aurait une conversion automatique en double, puis boxing pour l'assignation vers Double (l'objet). Meme apres avoir fait un cast explicit, je me retrouve avec la meme erreur:
Seul fonctionne un cast vers le primitif avant l'assignation vers l'objet:. Quel est la regle des conversions dans ce cas et pourquoi mon raisonnement a t il echoue ?

J'imagine que la solution est la meme que pour l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
public class Test2 {
   public static void doStuff(Long a) {
      System.out.println("Value is [" + a + "]");
   }
   public static void main(String[] args) {
      int a = 5;
      doStuff(a);
   }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
$ javac Test2.java 
Test2.java:7: doStuff(java.lang.Long) in Test2 cannot be applied to (int)
      doStuff(a);
      ^
1 error
$
Merci de votre aide