stoße ich auf diesem Code, und ich bin verwirrt, warum ternärer Operator auf diese Weise verhalten, (ich habe nicht genau die gleiche Frage auf Stackoverflow finden, so mit mir tragen)ternärer Operator und primitive Typen
a Haben Blick auf diesem Code
public class TernaryOperatorTester{
public static void main(String []args){
Integer i1 = 8;
Integer i2 = 8;
byte b1 = 3; //OK
byte b2 = 5 + 4; //OK
byte b3 = i1 == i2 ? 4 : 8; //KO!
byte b4 = i1 == i2 ? (byte)4 : 8; //OK!!, else part do not need cast!
short s1 = i1 == i2 ? 4 : 8; //KO! similarly
short s2 = i1 == i2 ? (short)4 : 8;//OK!!,and again else part do not need cast!
}
}
ersten, was in dem ternären Operator zurückgegeben wird, ist wörtlicher Wert (es ist nicht ein Ausdruck ist, dass in einem int oder anderen größeren Datentypen gefördert wird), - wie b1
und b2
, warum ist b3
nicht mit Literalwert OK?
Sekunde, auch wenn es eine Erklärung für b3
gibt, warum b4
ist OK ohne in den sonst Teil des Ausdrucks zu werfen?
Ich habe ein anderes Beispiel mit kurzen Datentyp, der das gleiche Verhalten hat.
dank
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25 – GriffeyDog
Obwohl es kein genaues Duplikat ist, siehe http://stackoverflow.com/questions/12332574 –
beide sind nicht doppelt! Ich nehme hier nicht das Auto-Boxen. – LeTex