28/05/2010

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

Code :

  public class AClass {
public static void main(String[] args) {
byte b = 2;
char c = -1;
short s = -3;
int i = c;
double d = 2.0;
float f = 2.0;
}
}


Réponse :
Les lignes 4 et 8 provoquent des erreurs de compilation.

Explication :
- la ligne 3 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, à savoir la conversion rétrécissante implicite.

- la ligne 4 elle est illégale, car -1 est un entier qui ne peut pas rentrer dans un char (il est négatif et les char sont non-signés). Nous ne sommes donc pas dans le cas particulier de la ligne 3, et le cast implicite n'est pas autorisé.

- la ligne 5 est légale pour les mêmes raisons que la ligne 3.

- la ligne 6 est légale : il s'agit d'un cast élargissant implicite.

- la ligne 7 est légale : il s'agit de l'assignation d'un double à une variable de type double : il n'y a pas de cast

- la ligne 8 est illégale, car l'espression "2.0" est un double et qu'elle ne peut pas être assignée à une variable de type float sans cast explicite. L'exception des lignes 3 et 5 ne s'applique qu'aux valeurs entières.


Point théorique associé :
ici

Questions pièges Java n°1

Ce billet et l'un des premiers d'une série issue d'un test que j'avais réalisé en 2006 après avoir lu la spécification Java 1.5
Le test comprenait 125 "questions pièges" sur le langage Java.

Je pense que la plupart de ces questions sont toujours valables en 1.6 et peut-être en 1.7

Question 1 :
Dans le programme suivant, y a-t-il des lignes qui provoquent des erreurs de compilation ? Lesquelles :

  public class AClass {
public static void main(String[] args) {
byte b = 2;
char c = -1;
short s = -3;
int i = c;
double d = 2.0;
float f = 2.0;
}
}

01/01/2000

Illustrations d'une note future

Hadoop.png



Hadoop3.png



serial.gif

AutoIt.png

RuneScape source.png

RuneScape_result.png

RocSearcher.png

Exescript_Workflow.png

Redirection_Workflow.png

Exescript crash.png



Architecture.png



Parrallel.png

parralélisabilité.png

orphans.png



VMWare.png



VMWare-saturation.png



CPU-usage.png



chronograms errors.png



ProcExp.png



graph_diff.png



mutexes limit.png