Re: Une bien étrange NPE.

Benoît Dissert <[email protected]> Fri, 15 Apr 2011 22:42:10 +0200
Newsgroups gmane.comp.java.french.general
Message-ID <[email protected]>
Il faut se référer à la spec Java :
http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html
<http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html>section
15.25.

Le type de retour de l'opérateur conditionnel est en l'occurence imposé par
le fait que 40 soit un int.
Du coup, le second est transformé en int par unboxing et c'est là que tu as
le NPE.

Benoît

PS : ça ressemble au Puzzler 8 de Josh Bloch, pour ceux qui ont le bouquin

2011/4/15 Cédric Beust ♔ <[email protected]>

> L'autoboxing essaie de convertir un Integer qui est null en int.
>
> --
> Cédric
>
>
> 2011/4/15 Jean-Baptiste BRIAUD -- Novlog <[email protected]>
>
>> Juste un élément que j'ai oublié :
>>
>> Voici la ligne 2 : Integer i = (b ? 40 : a.n())
>>
>> Le Integer i devant donner le signal pour l'autoboxing.
>> visiblement, la partie compila time dispose bien de l'info, mais @runtime,
>> çà plante.
>> Que çà plante ne me gène pas tellement, ce qui est troublant, c'est le
>> type de l'exception.
>> Pourquoi une NPE ?
>>
>>
>> On 15 avr. 2011, at 22:06, Jean-Baptiste BRIAUD -- Novlog wrote:
>>
>> > Bonjour à tous,
>> >
>> > Ca faisait très très longtemps que je n'avais pas eu de problème de ce
>> genre.
>> >
>> > Une NPE.
>> > Jusque là, rien à dire.
>> > J'investige ... et voici ce que je trouve (conceptuellement).
>> >
>> > ligne 1 : a.m();
>> > ligne 2 : a.n();
>> >
>> > Or la NPE est à la ligne 2 !
>> > Donc a est nul, mais la ligne 1 est passé.
>> >
>> > Maintenant voici le détail de la ligne 2 : b ? 40 : a.n()
>> >
>> > La méthode n retourne un Integer... sauf que 40 est un int, pas un
>> Integer.
>> > Résultat, çà passe la compile depuis l'autoboxing, mais visiblement pas
>> le runtime.
>> >
>> > Correction de la ligne 2 : b ? new Integer(40) : a.n()
>> > Comme au bon vieux temps, sans autoboxing ... et çà passe.
>> >
>> > Etrange, non ? Serait-ce un bon puzzle ?
>> > Je suis en 1.6.
>>
>>
>
>
> --
> Cédric
>
>
>