演算子と判定構造の使用について(テスト対策) 

コンパイルエラーになる文を選んでください

  1.  byte a = 0b10000000;
  2. short b = 128 + 128;
  3. int c = 2 * 3L;
  4. float d = 10.0;

 答えは

1、3、4

・型変換の時、大きな範囲の値を小さな変数に代入するときは、キャストが必要!

・byteやshort型の変数に代入する整数リテラルの場合、この値が型の範囲内かどうかのチェックが大事!

・byte⇒-128~127 よって1は誤り。ただし、明示的にキャストすればコンパイルエラーにはならない

 例)byte = (byte) 0b10000000;

・選択肢2は、int型のリテラル同士の演算であるからint型のデータになるが、この演算結果の256はshort型の範囲内(‐32768~32767)であるのでコンパイルエラーにはならない

・数値を演算するとき、オペランド演算の対象となる値や変数、定数などのこと)の型が異なる場合、小さいほうの型は大きいほうの型に自動変換される。選択肢3は、オペランドリテラルにlong型を表す接尾辞(L)がついているため、int型とlong型の演算となるこの式は、演算子の左ぺランドをlong型に変換してから演算される。よって

 int c = 6L;

と同等の意味になる。long型の値をint型の変数に代入することはできないので、コンパイルエラーとなる。

・整数リテラルのデフォルトの型はint型だが、浮動小数点数リテラルの場合にはdlubleがデフォルトの型。選択肢4はdouble型の値をより小さい範囲しか扱えないfloat型の変数に代入しようとしているためコンパイルエラー。