私はこのコードで出くわす、と私は困惑していますが、(私はstackoverflowの上の正確な同じ質問を見つけられませんでしたので、私と一緒にクマ)三項演算子、なぜ三項演算子をこのように動作しているプリミティブ型
を持っています三項演算子で返されるもの
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!
}
}
最初にこのコードを、見て、リテラル値は、(それが表現はそれがintまたは他のより大きなデータ型に昇格されていない)である - ちょうどb1
のように、とb2
、なぜb3
はリテラル値でOKではないのですか?
第二に、b3
の説明があるにもかかわらず、式のelse部分にキャストなしでb4
が問題ないのはなぜですか?
私は短いデータ型の別の例を示しますが、これは同じ動作です。
おかげ
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25 – GriffeyDog
正確な複製はありませんが、http://stackoverflow.com/questionsをご覧ください。/12332574 –
両方が重複していません!私はここでオートボクシングについては取っていません。 – LeTex