4

私はこのようなコードを持っています

short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile

コンパイルが失敗する理由は何ですか? x+xは常にInteger以上を生成しますが、なぜですか? Number

4

1 に答える 1

20

どの二項演算子も . を生成しませんInteger。ただし、int短い型の代わりにを使用しbyte、 コンパイラが値をインライン化できる場合は、値をキャストできます。例えばshortchar

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 億以下のエラーが発生しました。

于 2014-01-17T12:42:56.323 に答える