| English | 意味 |
|---|---|
| casting/ˈkæstɪŋ/ | 型変換 |
| truncates/ˈtrʌŋkeɪts/ | 切り捨て |
| widening/ˈwaɪdənɪŋ/ | 拡張 |
| narrowing/ˈnærəʊɪŋ/ | 縮小 |
| range/reɪndʒ/ | 範囲 |
| overflow/ˌəʊvəˈfləʊ/ | オーバーフロー |
値の型の変更
- キャストは値をある型から別の型へ変換します。
- 括弧でターゲット型を書きます:
(double) 5は5.0を与え;(int) 3.9は3を与えます。 intへのキャストは切り捨てを行います。小数点以下を削除し、四捨五入はしません。(int) 3.9は3に、(int) -2.7は-2(ゼロ方向に)にそれぞれ対応する。
自動拡張 (Widening)
- 小さな型から大きな型へ (
int→double) は拡張と呼ばれます。 - 拡張は安全なので、Javaは自動的に行います:
double d = 5;は5.0を格納します。 intからdoubleへ移行しても情報は失われません。- 拡張キャストを明示的に書くことは稀ですが、可能であることは許容されます。
縮小には明示的キャストが必要
- 大きな型から小さな型へ (
double→int) は縮小と呼ばれ、データ損失の可能性があります。 - Javaは明示的キャストを要求します:
int n = (int) 3.9;(キャストなしではコンパイルできません)。 - キャストとは、「小数点以下を削除することを理解している」と約束することです。
- 縮小はゼロ方向へ切り捨てられます。
範囲と過不足 (Overflow)
- 各型には固定された 範囲 がある:
intはおおよそ±2.1 億を保持する。 - 範囲を超えると過不足が発生し、値が巻き戻されて誤った数になります。
- エラーは発生せず、結果はただ静かに誤ったものとなります。
- 巨大な整数扱うには、より大きな型 (例えば
long) が必要です。
int への型変換(カスト)は切り捨てを行います — 四捨五入は行いません。 (int) 3.9 は 3 であり、4 ではありません;(int) 2.99 は 2 です。強制的に 浮動小数点数 除算を行うには、片方の演算子を型変換します:(double) 7 / 2 は 3.5 ですが、(int)(7.0 / 2) は 3 です。また オーバーフロー にも注意してください:±2.1 億を超える int の結果は、エラーなしで静かにラップされます。
2つのintの平均を正しく求める方法:
int a = 7, b = 2;int avg = a / b;→3(int除算では余りが破棄されるため — 意図した結果ではない可能性が高いです)。double avg = (double) a / b;→3.5(片方を変換することで小数点除算が強制されます)。
変換 (type) value は型間の変換を行います。int → double (拡大) は自動的かつ安全ですが、double → int (縮小) には 明示的な変換 が必要で、ゼロ方向に 切り捨て られます(四捨五入は行われません)。各型には固定された 範囲 があり、それを超えると静かな オーバーフロー が発生します。
intとdouble間のキャスト
(int) は 3.9 を 3 に切り捨て、片方の側をキャストすると 3.5 になる。
Javaにおける (int) 3.9 の値は何か?
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
intへのキャストは切り捨て(小数点以下を削除)するため → 3 となり、4 ではない。
intをdoubleに変換する(安全で自動的変換)ことを...という。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
小さい値から大きい値への変換はワイドニングであり、自動的に行われる。
コンパイルするために明示的なキャストが必要なものはどれか?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
double → int は狭義化であり、明示的なキャストを要する。
(double) 7 / 2 の値は何か?
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
演算子の一方を浮動小数点型に強制変換すると→3.5となる。
int型の結果が範囲を超えるとオーバーフローが発生し、Javaではエラーとして報告される。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
オーバーフローは静かにラップされる — エラーは発生しない。