基本データ型(プリミティブ型)について
Javaの基本データ型には、整数、小数、文字、真偽値を扱う8種類があります。それぞれ何を保持できるのか、値の範囲と書き方をまとめて確認しましょう。
基本データ型 一覧表
| 型 | ビット数 | 扱う値 |
|---|---|---|
| boolean | 規定なし | true または false |
| char | 16bit | UTF-16の1コード単位(0〜65535) |
| byte | 8bit | 符号付き整数:−128〜127 |
| short | 16bit | 符号付き整数:−32768〜32767 |
| int | 32bit | 符号付き整数:−2147483648〜2147483647 |
| long | 64bit | 符号付き整数:約−922京〜約922京 |
| float | 32bit | 浮動小数点数 |
| double | 64bit | 浮動小数点数 |
bit(ビット)は、0か1を表す単位です。数値型のビット数は、その値を表すための桁数を示しています。booleanについては、実際に使う記憶領域の大きさをJavaの言語仕様では定めていません。
以下のコード例は、PrimitiveExample.javaのmainメソッド内に書く部分を抜き出しています。
boolean
trueかfalseのどちらかの値を保持します。条件が成り立つかどうか、という情報を入れておく型です。
PrimitiveExample.java
boolean isBeginner = true;
int time = 8;
boolean isAfternoon = (time >= 12); この例ではtimeが8なので、isAfternoonにはfalseが入ります。booleanの値は数値の0や1ではなく、trueとfalseです。
char
'a'や'あ'のような文字を保持します。ただし、厳密にはUTF-16という文字の表し方における、16bitの1コード単位を保持する型です。
Unicodeは、世界のさまざまな文字に番号を割り当てる規格です。charで扱う値の範囲は、16進数で0000〜FFFF、10進数で0〜65535です。16の4乗=2の16乗なので、16bitで65536通りを表せます。
文字を直接書く時は、半角のシングルクォーテーション(')で囲みます。コードに直接書いた値のことを「リテラル」と言います。
PrimitiveExample.java
char a = 'a';
char b = 'あ';
char c = '男';
char d = '\u0041'; 最後の\u0041は、16進数の文字コードを使った書き方で、'A'と同じ値です。文字列に使うダブルクォーテーション(")とは区別してください。
charには範囲内の整数を代入することもできます。その場合は、その数値に対応する文字コードとして扱われます。
byte
8bit(1バイト)の符号付き整数です。値の範囲は−128〜127です。
8bitというのは、8桁の2進数です。Javaの符号付き整数は「2の補数」という方式で負の数も表します。
| ビットの並び | byteとしての値 |
|---|---|
10000000 | −128 |
11111111 | −1 |
00000000 | 0 |
01111111 | 127 |
一番左の桁が1なら負、0なら0以上の数を表します。ただし、左端だけを符号にして残りの桁をそのまま大きさと読む方式ではありません。この仕組みは、short、int、longでも共通です。
範囲を式で表すと、−27〜27−1となります。
short
16bitの符号付き整数です。値の範囲は−32768〜32767、つまり−215〜215−1です。
最小値のビットの並びは1000000000000000、最大値は0111111111111111です。
int
32bitの符号付き整数です。値の範囲は−2147483648〜2147483647(約−21億〜約21億)、つまり−231〜231−1です。
整数の基本となる型です。普通に整数を使う時は、まずintを使えばよいでしょう。
末尾にLを付けずに書いた整数リテラルは、int型として扱われます。そのため、例えば十進数で7000000000とそのまま書くと、intの範囲外なのでコンパイルエラーになります。大きな整数の書き方は、次のlongのところで説明します。
long
64bitの符号付き整数です。値の範囲は約−922京〜約922京、つまり−263〜263−1です。正確には、−9223372036854775808〜9223372036854775807となります。
intの範囲を超える整数をlong型のリテラルとして書く時は、数字の最後にLまたはl(小文字)を付けます。付けないとint型として扱われ、コンパイルエラーになります。小文字のlは数字の1と紛らわしいので、大文字のLがおすすめです。
PrimitiveExample.java
long population = 7000000000L; float
32bitの浮動小数点数です。要は、小数点以下を含む数を扱える型です。
float型の小数リテラルを書く時は、数字の後ろにFまたはfを付けます。
PrimitiveExample.java
float value = 1.5F; doubleより精度は低いですが、少ないビット数で値を表せます。大量の数値データや、float型を使うことが決まっている処理などで使われます。
double
64bitの浮動小数点数です。非常に大きな値から、絶対値の小さな値まで扱えます。
小数の基本となる型です。Fなどを付けずに書いた小数リテラルは、double型として扱われます。普通に小数を使う時は、まずdoubleを使えばよいでしょう。
PrimitiveExample.java
double value = 1.5; ただし、floatとdoubleは2進数で数を表すため、例えば0.1のような十進小数を正確には保持できず、近似した値になります。誤差が出るのは割り算の時だけではなく、値を保持する時や、足し算などの計算でも起こります。
だからといって「計算には使わない方がよい」というわけではありません。近似値でよい計算には広く使われます。金額の計算など、十進小数を正確に扱いたい場合にはBigDecimalクラスを使う方法があります。
質問・コメント
0件この記事についての質問や、学習して気づいたことをお寄せください。
コメントを書く
コメントの受付は準備中です。入力しても送信・保存されません。
コメントは管理者の承認後に公開されます。
この記事のコメント
まだコメントはありません。
受付開始後、承認されたコメントがここに表示されます。