28/05/2010

Questions pièges Java n°2 : réponse

Code :

public class AClass {
public static void method(byte b){}
public static void main(String[] args) {
byte b1 = 2;
byte b2 = 256;
char c = 10-20;
method(2);
method(256);
}
}


Réponse
Les lignes 5, 6, 7 et 8 sont illégales.

Explication
- la ligne 4 devrait être illégale car l'expression "2" est un entier et ne devrait pas pouvoir être assigné à un byte sans cast explicite. Cependant nous sommes dans un des seuls cas particuliers où cette règle ne s'applique pas.
- la ligne 5 elle est illégale, car 256 est un entier qui ne peut pas rentrer dans un byte (les bytes peuvent contenir des valeurs comprises entre -128 et 127). Nous ne sommes donc pas dans le cas particulier de la ligne 3, et le cast implicite n'est pas autorisé.
- la ligne 6 est illégale pour les mêmes raisons
- la ligne 8 est illégale pour les mêmes raisons que la ligne 4.
- la ligne 7 est illégale, car nous somme dans le cadre d'un passage de paramètre, et non pas d'une assignation, il ne s'agit donc pas du cas particulier de la ligne
3.


Point théorique associé
ici

Les commentaires sont fermés.