1
Byte byte1=new Byte((byte) 20);
Short short1=new Short((short) 20);

Byte および Short ではキャスト演算子を使用する必要があるのに、他の DataType ではキャスト演算子を使用しない理由

Integer integer=new Integer(20);
Long long1=new Long(20);
Double double1=new Double(20);
Float float1=new Float(20);
4

5 に答える 5

2

リテラル "20" は、コンパイラによって intとして処理されます。IntegerLongFloat、およびDoubleは、 intの範囲以上の数値範囲を処理できるため、コンパイラは暗黙のキャストを実行できます。ShortByteの範囲はより小さく、暗黙のキャストを防ぎます。明示的にキャストすると、数値がByteまたはShortで表現できない場合、ClassCastExceptionが発生する可能性があります。

于 2013-09-07T16:11:21.777 に答える
0

byte のコンストラクターは次のように定義されます。

 public Byte(byte value) {
        this.value = value;
    }

byte が必要です。明示的にキャストする必要がある整数を渡しているため、略して同じことが当てはまります。

于 2013-09-07T16:11:20.377 に答える
0
Byte byte1=new Byte((byte) 20);

バイト データ型は、8 ビットの符号付き 2 の補数の整数です。最小値は -128 で、最大値は 127 (両端を含む) です。

ただし、上記の 20 は整数です。

int データ型は、32 ビットの符号付き 2 の補数整数です。最小値は -2,147,483,648 で、最大値は 2,147,483,647 (両端を含む) です。

したがって、バイトは範囲外の値を取ることはできません。130バイト範囲外であるため、 20ではなく130などの整数を割り当てようとすると、データ (ビット) が失われます。キャストすることにより、変換を認識していることをコンパイラーに伝えます。

于 2013-09-07T16:16:35.230 に答える