プリミティブ型のコードトレース
宣言できる値の範囲、演算途中の数値昇格、charの数値としての性質を具体的なコードで確認します。型の変換をした時点を特定し、コンパイルエラーと実行結果を区別します。
この単元で学ぶこと
- 8種類のプリミティブ型とリテラルを区別する
- 整数の範囲と小数の型を踏まえ代入を判定する
- charとbooleanの数値型との違いを説明する
本文解説
右辺の型を書き出す byte a=10,b=20;int total=a+b;では加算前にintへ昇格し、結果30もintです。byte total=a+b;は変数同士の計算を暗黙にbyteへ戻せず失敗します。byte total=10+20;なら範囲内のint定数式として代入できる点と比較します。
拡大代入は演算より後 int a=50000;long total=a*a;ではa*aを先にintで計算し、範囲を超えた値をlongへ入れます。long total=(long)a*a;なら最初からlong演算です。大きな結果を扱うには受け取る変数だけでなく、計算する型も広くする必要があります。
整数の境界 int n=2147483647;n++;ではint最大値の次は-2147483648になります。Javaの通常の整数演算は桁あふれを自動で例外にしません。byte n=128;がコンパイル不能であることと、実行時演算の範囲超過は別の場面です。
charの数値変換 char c='B';int code=c;は文字コード相当の66を得ます。c+1はintの67なので数字表示、(char)(c+1)ならCです。文字表示と数値加算を行き来する例では、キャストの位置が意味を変えます。
数値リテラルの表記 0b1010は二進、0x10は十六進、先頭0の010は八進の整数リテラルです。それぞれ十進表示では10、16、8になります。1_000のような区切りのアンダースコアは桁数に含まれず1000です。表示の基数がソースの表記を引き継ぐわけではありません。
小数から整数への明示変換 int n=(int)3.9;は3、(int)-3.9は-3です。小数部分を0方向に切り捨てるので四捨五入でも常に小さい整数へ丸める処理でもありません。int n=3.9;は明示変換なしではコンパイルできません。
浮動小数点の限界 doubleはすべての十進小数を正確に表せる型ではありません。0.1+0.2==0.3はfalseになる例があり、金額等で小数の厳密性が必要な設計とは区別します。本単元ではまず2.5や3.5など表現しやすい値で演算順を追い、型名だけで完全な精度を保証しないことを理解します。
値コピーと独立性 int a=4;int b=a;a=9;の後でもbは4です。プリミティブ代入はその時点の値をコピーするので、bがaへつながり続けるわけではありません。参照型の共有を学ぶ前に、数値の変数は別々に更新されることを確認します。
図解
重要ポイント
- 整数はbyte/short/int/long、小数はfloat/double。
- charはUTF-16の一単位、booleanはtrue/false。
- 整数リテラルは通常int、小数リテラルは通常double。
- プリミティブ型へnullは代入できない。
間違えやすい点
- floatへdoubleリテラルをそのまま代入しない。
- charの一重引用符とStringの二重引用符を区別する。
- 整数除算の結果を後からdoubleへ入れても小数部分は戻らない。
用語解説
- プリミティブ型
- 数値・文字・真偽値を直接表す8つの基本型。
- リテラル
- ソースコードへ直接書いた5、2.5、true等の値表現。
- 値域
- その型が表せる値の範囲。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。