私はこのようなコードを持っています
short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile
コンパイルが失敗する理由は何ですか? x
+x
は常にInteger
以上を生成しますが、なぜですか? Number
私はこのようなコードを持っています
short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile
コンパイルが失敗する理由は何ですか? x
+x
は常にInteger
以上を生成しますが、なぜですか? Number
どの二項演算子も . を生成しませんInteger
。ただし、int
短い型の代わりにを使用しbyte
、 コンパイラが値をインライン化できる場合は、値をキャストできます。例えばshort
char
final short a = 1;
final short b = 2;
short c = a + b; // does compile, because of constant inlining.
を生成する唯一の演算子Integer
はキャストです。
Integer i = (Integer) 1;
ところで:奇妙な点は、Javaが32ビットfloat
を64ビットlong
値よりも「広い」と定義していることです。これには、 float の精度がはるかに低いという欠点があります。このことを考慮。
long l = 7777777777777777777L;
l += 0.0f;
System.out.println(l);
版画
7777777579364188160
0.0F が追加されたにもかかわらず、(float がより広いため)l
に暗黙的にキャストされfloat
、(演算子割り当てが使用されたため) キャスト バックされ、200 億以下のエラーが発生しました。