Javaのトラップ

というわけで、講習でJavaを習っているわけだが、とりあえず「一番下のコース」にしたので、プログラム構造のおさらい状態に(笑)
しかしそれでもえるところはあった。(上のコースだと気づかなかったかも。)

  • short+short = int?

別に桁あふれとかではない。「型の自動キャスト」がかかってしまうらしく、short,byte,intの絡む演算は全てintで帰ってくるのである。結果をshortに入れるにはshortに明示的にキャストしなければならない。
この規則に絡んで、5/2 = 2になる。5と2がintと識別されるからだが、5.0/2は2.5になる。うっかりやってしまったら、見つけるのが難しそうだ。

  • (int)(-8.3) = -8?

負のdouble型数値をintにキャストすると「0に向かってキャストされてしまう」。
市販のテキストに書かれている「-10から10間での乱数を発生させる文」が「-10を返すことがない」ので気がついてしまった。(0が約二倍の確率で返ってくる。)原因は「random関数の戻り値を21倍して10を引きintにキャスト」している箇所で、正しくは「random関数の戻り値を21倍してintにキャストし10を引く」。
とにかく、「型変換」がらみはよろしくないようだ。