Comprendre Boxing / Unboxing
Salut,
Soit le code suivant:
Code:
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:
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:
Code:
Double c = (Double)a;
Seul fonctionne un cast vers le primitif avant l'assignation vers l'objet:
Code:
Double c = (double)a;
. 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:
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:
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