Seltsames Java-Verhalten mit Bedingungsoperator. Ist es ein Fehler?

8

Können Sie bitte das unten stehende ausführen und erklären?

%Vor%

Ich fand das überraschend, da jemand erwarten würde, dass 1 gedruckt wird und nicht 1.0

    
Dimitris 10.10.2013, 10:42
quelle

2 Antworten

17

Es ist überhaupt keine Überraschung, obwohl es wie eine scheint. Das Verhalten ist in JLS §15.25 - Bedingter Operator :

  

Andernfalls, wenn der zweite und der dritte Operand Typen haben, die   konvertierbar (§5.1.8) in numerische Typen, dann gibt es mehrere Fälle:

     
  • Wenn einer der Operanden vom Typ byte oder Byte ist und der andere von   Geben Sie short oder Short ein, dann ist der Typ des bedingten Ausdrucks    short .

         

    [...]

  •   
  • Andernfalls wird die binäre numerische Heraufstufung (§5.6.2) auf den Operanden angewendet   types und der Typ des bedingten Ausdrucks ist der heraufgestufte Typ   des zweiten und dritten Operanden.

  •   

Beachten Sie, dass die binäre numerische Hochstufung eine Wertsatzkonvertierung (§5.1.13) durchführt und die Unboxing-Konvertierung durchführt (§5.1.8).

Die Typen Integer und Double werden also als primärer Binärprozedur in ihre jeweiligen primitiven Gegenstücke - int und double - entpackt. Und dann ist der Typ des bedingten Operators der beworbene Typ von int und double , der double ist. Daher ist das Ergebnis 1.0 . Und natürlich wird das Endergebnis dann wieder in Double eingereiht.

    
Rohit Jain 10.10.2013, 10:46
quelle
0

Hier ist ein Artikel, der gestern in DZone veröffentlicht wurde und darüber gesprochen hat:

Java automatisches Unboxing gotcha

Lustigerweise sieht der Beispielcode ähnlich aus ...

    
Eduardo Sanchez-Ros 11.10.2013 10:25
quelle

Tags und Links