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
oderByte
ist und der andere von Geben Sieshort
oderShort
ein, dann ist der Typ des bedingten Ausdrucksshort
.[...]
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.
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 ...
Tags und Links java core conditional-operator