2

重複の可能性:
Eclipseのバグ?ショートはショートではないのはいつですか?

shortJavaでは、次のようにまたはbyte内部ブロックを割り当てることができます。

short s = 20000;
byte  b = 120;

20000はshort値であり、120は値byteであるため、次のことを試してみてください。

short s = 67000;
byte  b = 128;

どこintからでもコンパイルできないというエラーが表示されますbyte

byte b = (byte)12232;

値が失われる可能性があるという警告もトリガーされません。関数呼び出しでは、とにかくそれをキャストすることを余儀なくされています:

void test(short s){}
test(1) //invalid
test((short)1) //valid

タイプにある間、returnそれは再び大丈夫です。

short test(){
    return 1; //valid
}

コンパイラが(少なくとも定数から)数値の境界を知ることを時々考えているのに、他の場所ではそれを忘れているように見えるのはなぜですか?

4

1 に答える 1

4

Javaの整数リテラルは、 (として宣言されている)と(intとして宣言されている)の2種類だけです。123long123L

  • short s = 1割り当てであり、そこで狭い変換が許可されているため、許可されます
  • short s = 67000で表現できる最大値を超えているため、機能しませんshort
  • short s = (short)67000キャストを配置しているため、67000が最大値を超えているという事実を無視するようにタイプチェッカーに明示的に要求しているため、機能します
  • test(1)メソッド呼び出しであるため機能しません。狭い変換は許可されておらず(int-> short)1、コンパイラによって常に整数リテラルとして評価されます。
于 2013-01-28T00:25:26.333 に答える