La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Puzzler.

Présentations similaires


Présentation au sujet: "Puzzler."— Transcription de la présentation:

1 Puzzler

2 Puzzler C'est quoi un Puzzler ?

3 Modèle d'exécution Java
Puzzler Modèle d'exécution Java

4 Puzzler Qu'affiche ce code ? public class Parsing { /**
* Returns Integer corresponding to s, or null if s is null. NumberFormatExceptionif s is non null and * doesn't represent a valid integer */ public static Integer parseInt(String s) { return (s==null)?(Integer)null:Integer.parseInt(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

5 Puzzler - Réponse NPE car null est un Integer et Integer.parseInt() renvoie un int donc il y a un auto-unboxing de null. public class Parsing { public static Integer parseInt(String s) { return (s==null)?(Integer)null:Integer.parseInt(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

6 Puzzler - Fix Evitez de mixer type primitif et wrapper, surtout avec ?: Attention au boxing/unboxing de null public class Parsing { public static Integer parseInt(String s) { return (s==null)?null:Integer.valueOf(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

7 Puzzler Qu'affiche ce code ? public class Parsing { /**
* Returns Integer corresponding to s, or null if s is null. NumberFormatExceptionif s is non null and * doesn't represent a valid integer */ public static Integer parseInt(String s) { return (s==null)?(Integer)null:Integer.parseInt(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

8 Puzzler - Réponse NPE car null est un Integer et Integer.parseInt() renvoie un int donc il y a un auto-unboxing de null. public class Parsing { public static Integer parseInt(String s) { return (s==null)?(Integer)null:Integer.parseInt(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

9 Puzzler - Fix Evitez de mixer type primitif et wrapper, surtout avec ?: Attention au boxing/unboxing de null public class Parsing { public static Integer parseInt(String s) { return (s==null)?null:Integer.valueOf(s); } public static void main(String[] args) { System.out.println(parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));

10 Puzzler Qu'affiche ce code ? public class BeyondCompare{
public static void main(String[] args) { Object o=3; System.out.println(new Double(3).compareTo(o)==0); }

11 Puzzler - Réponse Il compile en 1.4 (mais CCE à l'exécution) mais pas en 1.5 !! Comparable indique avec quoi comparé Et Double est définie comme ceci : public interface Comparable<T> { int compareTo(T t); // avant c'était Object } public class Double extends Number implements Comparable<Double> { ... }

12 Puzzler - Fix Il faut utiliser un Double : Et donc comparer les Double entre eux Normalement, la compatibilité binaire est assurée, ici non car cela permet de détecter une CCE à la compilation public class BeyondCompare{ public static void main(String[] args) { Double o=3; System.out.println(Double.valueOf(3).compareTo(o)==0); }

13 Puzzler Qu'affiche ce code ? public class Fibonacci {
private static final int LENGTH=7; public static void main(String[] args) { int[] fib=new int[LENGTH]; fib[0]=fib[1]= 1; // First 2 Fibonacci numbers for (int i=2; i<fib.length;i++) fib[i]=fib[i -2]+fib[i -1]; System.out.println(Arrays.asList(fib)); }

14 Puzzler - Réponse Une valeur de hachage [[I@ad3ba4
Arrays.asList(T...) prend un tableau d'objet pas un tableau de type primitif !! public class Fibonacci { private static final int LENGTH=7; public static void main(String[] args) { int[] fib=new int[LENGTH]; fib[0]=fib[1]= 1; // First 2 Fibonacci numbers for (int i=2; i<fib.length;i++) fib[i]=fib[i -2]+fib[i -1]; System.out.println(Arrays.asList(fib)); }

15 Puzzler - Fix Integer != int
Ne pas utiliser Arrays.asList() juste popur faire l'affichage, utiliser Arrays.toString() !! public class Fibonacci { private static final int LENGTH=7; public static void main(String[] args) { int[] fib=new int[LENGTH]; fib[0]=fib[1]= 1; // First 2 Fibonacci numbers for (int i=2; i<fib.length;i++) fib[i]=fib[i -2]+fib[i -1]; System.out.println(Arrays.toString(fib)); }


Télécharger ppt "Puzzler."

Présentations similaires


Annonces Google