質問: 初めまして。 今月からjavaの勉強を始めました。 独習Javaで学習をしているのですが理解できているのか分からないため、 おそらく初歩的なものとは思いますが、質問をさせてください。 以下が問題のプログラムです。(独習Java P.27) class AssignmentProblem{ public static void main(String args[]){ byte b1=1; byte b2=2; byte b3=b1*b2; System.out.println(b3); } } 教本に書いてある内容ですが、 ・byte b3=b1*b2; のステートメントに問題がありコンパイル出来ない ・エラーは代入ステートメントの右辺が自動的にint型に拡張される為に起 こる ・このステートメントを正常にコンパイルするためには、右辺の結果をbyte 型に変換する必要がある 上記を見て、 byte b3=(byte)b1*b2 とまず型変換を試みたのですが、以下のエラーが出てしまいました。 精度が落ちている可能性 検出地:int 期待値:byte byte b3=(byte)b1*b2 エラー 1個 右辺をbyteじゃなくてintの字面にすればいけるのかしら... byte b1=1; byte b2=2; int i=b1*b2; byte b3=(byte)i; System.out.println(b3); と上記の内容で試みたら、コンパイルに成功。 出力も2と出ました。 この内容で「右辺の結果をbyte型に変換」が出来た、ということでしょう か。 誤りや、別の解答があれば教えて頂けるとありがたいです。 よろしくお願い致します。
回答: 匿名氏に先を越されたか。 変数のキャストも演算のひとつ。 優先順位があるってこと。 >byte b3=(byte)b1*b2 これは、書き替えたら byte b3=((byte)b1)*b2 であって、最初と変わらないってこと。