1. どのような数値型がある?
プログラミングでは常に数値を扱います—ユーザーの年齢から銀河の星の数、銀行口座の小数点以下の金額まで。とはいえ、課題によって必要な数値の種類は異なります。整数だけでよい場合もあれば、高精度の小数が必要な場合、または「マイナスがない」数(非負)が必要な場合もあります。
整数(int など)
整数とは、小数部分を持たない数です。
Java では最もよく int 型が使われますが、そのほかにもサイズや取り得る範囲が異なるいくつかの型があります。
- int — 整数に対する主力の「実務向け」型。非常に大きい(または小さい)値も扱え、メモリ消費も過度ではありません。 例えば、いいね数、年齢、1年の日数のカウントにはたいてい int が使われます。
- long — 値が非常に大きくなる(例えば数十億や数兆)場合に使用します。 例:YouTube の全期間の総再生回数を保持する。
- short — メモリ節約向けだが使用頻度は低い型。同じような小さな値が多数ある場面(例:音声データや色のコンポーネント)に向いています。
- byte — さらに小さな値用。メモリ節約が重要なグラフィックスやファイル処理で役立ちます。
浮動小数点数(double、float)
小数部分を持つ数を扱う必要があることもあります。例えば、気温、学生の平均点、少数付きの商品の価格などです。
- double — 浮動小数点数を保存するための「デフォルト」の型。多くの計算で十分な精度があります(例:3.1415926535…)。
- float — より軽量で精度は低め。メモリ節約が重要なコンピュータグラフィックスや巨大配列の処理などでよく使われます。
特別な数値型
- BigInteger — 標準の範囲を超える巨大な整数を扱う場合(暗号や天文学的計算など)。
- BigDecimal — 小数の正確な計算(財務、利率計算)向けのクラス。double や float に固有の誤差を回避できます。
2. 値の範囲
整数型は正と負の両方の値を保持できます。これは温度、口座残高、海抜など、値がゼロより上にも下にもなり得る場合に便利です。
例:
- int : -10, 0, 50
- long : 0, 10, -1000_000_000_000_000_000L
整数型
| 型 | サイズ | 値の範囲 | 使用例 |
|---|---|---|---|
|
1 バイト | -128 〜 127 | -128, 0, 127 |
|
2 バイト | -32 768 〜 32 767 | -1000, 0, 32000 |
|
4 バイト | -2 147 483 648 〜 2 147 483 647 | -1000000, 0, 2000000 |
|
8 バイト | -9 223 372 036 854 775 808 〜 9 223 372 036 854 775 807 |
-10_000_000_000, 1 |
浮動小数点型
| 型 | サイズ | 値の例 | 説明 |
|---|---|---|---|
|
4 バイト | 3.14f, -0.001f | 単精度(約7桁) |
|
8 バイト | 3.1415, -1.7E+308 | 倍精度(約15〜16桁) |
3. 数値リテラルのサフィックス
状況によっては、数値にどの型を使うかを明示する必要があります。これはサフィックスで指定します。
- L または l — long 型用(例:10000000000L)
- F または f — float 型用(例:3.14f)
- D または d — double 型用(通常は不要。サフィックスなしの小数は double)
サフィックスを付けない場合、整数はデフォルトで int、小数は double とみなされます。例えば、42 は int、3.14 は double です。
なぜ必要か? 例えば、long 型の変数に非常に大きな数値を代入する際、サフィックスを付けないとエラーになることがあります。
long bigNumber = 9000000000L; // L を外すとコンパイルエラーになる
アンダースコア _ による桁区切り
数字が長くなると、ゼロの数で混乱しがちです。見た目と読みやすさのために、Java では数値リテラルの中にアンダースコアを使えます。
int population = 146_700_000;
long stars = 100_000_000_000L;
これは完全に合法です。コンパイラはアンダースコアを無視するので、桁が一目でわかります。注意点は、先頭・末尾・小数点の直後・サフィックスの直前には置かないことです。
4. 文字型 char とは?
char 型は、1 つの文字(アルファベット、数字、句読点、空白、特殊記号、絵文字など)を保存するために使います。
例:
char letter = 'A';
char digit = '7';
char symbol = '?';
char cyrillic = '\u0416';
char euro = '€';
char smile = '☺'; // はい、これも可能です!
重要なルール:
- char 型の値は単一引用符で囲みます: 'A', '7', '#'.
- あくまで1 文字です! 'AB' と書くとコンパイラが文句を言います。
- 各文字の裏側には固有の数値コード(Unicode)が存在します。
Unicode:世界中の文字
Java は Unicode 規格を使用しており、ラテン文字だけでなく、キリル文字、漢字、絵文字、さらには古代エジプトの象形文字まで(必要であれば)扱えます。
豆知識:
char 型は本質的には 16 ビットの数値(0 から 65535)で、その値ごとに文字が対応しています。
5. 文字と数値:Unicode を介した関係
各文字は内部的には数値なので、char と int の間で自由に変換できます。
例:文字の Unicode コードを調べる
public class CharToInt {
public static void main(String[] args) {
char ch = 'A';
int code = ch; // 暗黙の変換 char → int
System.out.println("文字 '" + ch + "' のコード: " + code);
}
}
結果:
文字 'A' のコード: 65
次は逆に、コードから文字を得てみましょう:
public class IntToChar {
public static void main(String[] args) {
int code = 1040; // Unicode のキリル文字 U+0410 のコード
char ch = (char) code; // 明示的な変換 int → char
System.out.println(code + " の文字: " + ch);
}
}
結果:
1040 の文字: \u0410
6. Java の主なプリミティブ型
| 型 | サイズ(ビット) | 値の範囲 | 値の例 | 備考 |
|---|---|---|---|---|
|
8 | -128 ... 127 | 42 | ほとんど使われない |
|
16 | -32,768 ... 32,767 | 12345 | メモリ節約のため |
|
32 | -2,147,483,648 ... 2,147,483,647 | 1000000 | 整数の基本型 |
|
64 | ≈ −9.22 × 1018 ... ≈ 9.22 × 1018 | 5000000000L | 非常に大きな整数に |
|
32 | ~±3.4 × 10-38 ... ±3.4 × 1038 | 3.14f | 浮動小数点、低精度 |
|
64 | ~±1.7 × 10-308 ... ±1.7 × 10308 | 2.718 | 浮動小数点、高精度 |
|
16 | 0 ... 65 535 (Unicode) | '\u0416', 'A', '?' | 1 文字 |
|
1 | true, false | true | 論理値 |
GO TO FULL VERSION