Puzzler Java
Oct 12, 2012
Un petit puzzler Java pour se détendre ?.
Considérons le programme Java suivant :
public class TernaryPuzzler1 {
public static void main(String[] args) {
System.out.println(getBase(true) instanceof Sub1);
System.out.println(getBase(true));
}
private static Base getBase(boolean condition) {
Base result = condition ? new Sub1() : new Sub2();
return result;
}
}
class Base {
}
class Sub1 extends Base {
@Override
public String toString() {
return "Sub1";
}
}
class Sub2 extends Base {
@Override
public String toString() {
return "Sub2";
}
}
Que se passe-t-il lorsqu'on l'exécute? Ne vous inquiétez pas, il n'y a pas de piège. Oui, la condition est
vraie, donc une instance de Sub1
est retournée, et les lignes suivantes s'affichent donc à l'écran :
true
Sub1
Maintenant appliquons le même code aux classes Number
, Long
et Double
:
public class TernaryPuzzler2 {
public static void main(String[] args) {
System.out.println(getNumber(true) instanceof Long);
System.out.println(getNumber(true));
}
private static Number getNumber(boolean condition) {
Number result = condition ? new Long(10L) : new Double(20.0);
return result;
}
}
Que se passe-t-il lorsqu'on l'exécute? Attention, là, il y a un piège. Cliquez ici pour afficher la réponse.
Si vous voulez comprendre pourquoi, lisez donc la réponse à cette question sur StackOverflow, qui a inspiré ce post.
Our books on sale
Become a ninja with Angular

Our free-price book about Angular, always up-to-date, in English and in French
Become a ninja with Vue

Our free-price book about Vue, always up-to-date, in English and in French
Next training sessions
- From Sep 22, 2025 to Sep 25, 2025Angular: Ninja to Hero (remote)
- From Oct 6, 2025 to Oct 9, 2025Angular: Zero to Ninja (remote)