Javaプログラミング入門
4. データ型
最終更新:
javatutorial
-
view
データ型とは
Javaでは、プログラムの中でさまざまな種類のデータを扱うことができます。
そのデータの種類のことをデータ型、または単に型といいます。
Javaが扱うデータの具体例として、数値や文字、文字列といったデータが存在します。
こうしたデータは、それぞれ特定の「型」に分類されており、どのように扱うかが決まっています。
そのデータの種類のことをデータ型、または単に型といいます。
Javaが扱うデータの具体例として、数値や文字、文字列といったデータが存在します。
こうしたデータは、それぞれ特定の「型」に分類されており、どのように扱うかが決まっています。
主な型には、次のようなものがあります。
整数値(int, long など):小さな数から大きな数までを扱います。
小数値(float, double):小数点を含む数値を扱います。
文字(char):1文字(例:'A' や '9')を表します。
文字列(String):複数の文字を組み合わせた文字列を扱います。
真偽値(boolean):true(真)または false(偽)のどちらかを持つデータです。
小数値(float, double):小数点を含む数値を扱います。
文字(char):1文字(例:'A' や '9')を表します。
文字列(String):複数の文字を組み合わせた文字列を扱います。
真偽値(boolean):true(真)または false(偽)のどちらかを持つデータです。
Javaでは、どんな種類のデータを扱うかを事前に決めておくことで、効率的にプログラムを動かすことができます。
データ型は基本型と参照型に大きく分けることができます。
以下がJavaが扱うことができるデータ型の一覧になります。
データ型 | 基本型 | 論理型 | boolean | true(真)または false(偽)の2つの値を持ちます boolean 型はプログラムの意思決定を行う重要なデータ型です |
---|---|---|---|---|
整数型 | byte | Javaの整数型の中で最も小さいデータ型です 8ビット(1バイト) のサイズを持ちます -128から127の範囲を表現できます | ||
short | Javaの整数型の中で2番目に小さいデータ型です 16ビット(2バイト) のサイズを持ちます -32,768から32,767の範囲を表現できます | |||
int | Javaで最もよく使われる整数型です 32ビット(4バイト) のサイズを持ちます -2,147,483,648から2,147,483,647の範囲を表現できます | |||
long | Javaの基本型で最も大きな範囲の整数を扱うことができるデータ型です 64ビット(8バイト) のサイズを持ちます -9,223,372,036,854,775,808から9,223,372,036,854,775,807の範囲を表現できます | |||
浮動小数点型 | float | 小数を扱うためのデータ型です 約7桁の小数値を表現することができます(32ビット(4バイト)のサイズを持ちます) ±1.4 × 10⁻⁴⁵ ~ ±3.4 × 10³⁸の範囲を表現できます(例:3.1415927) | ||
double | 小数を扱うためのデータ型です 約15桁の小数値を表現することができます(64ビット(8バイト)のサイズを持ちます) ±4.9 × 10⁻³²⁴ ~ ±1.8 × 10³⁰⁸の範囲を表現できます(例:3.141592653589793) | |||
文字型 | char | 1つの文字(単一の文字)を表すデータ型です 16ビット(2バイト)のUnicode文字を扱うことができます。 | ||
参照型 | 文字列型 | String | 文字列(複数の文字の並び)を扱うためのデータ型です |
リテラル
プログラム内で命令文と値を識別するために定められた記述方法のことをいいます。
簡単に言うと、プログラムの中で 直接記述するデータや値のことを リテラルといいます。
簡単に言うと、プログラムの中で 直接記述するデータや値のことを リテラルといいます。
リテラルの考え方
次の2つの「0」を見てください。
0 0
どちらも 「0」 に見えますが、実は左側は「数字」、右側は「数値」です。
…と言われても、見た目だけでは違いがわかりませんよね?
0 0
どちらも 「0」 に見えますが、実は左側は「数字」、右側は「数値」です。
…と言われても、見た目だけでは違いがわかりませんよね?
そこで、区別しやすいように ルール を決めましょう。
ルール①「文字列はダブルクォーテーション("")で囲む」
このルールを適用すると、次のようになります。
0 "0"
こうすると、右側の "0" は「文字列」だとわかります。
ルール② 「数値は 0~9 の数字を直接入力する」
これにより、次のように明確に区別できます。
0 "0"
数値 数字
ルール①「文字列はダブルクォーテーション("")で囲む」
このルールを適用すると、次のようになります。
0 "0"
こうすると、右側の "0" は「文字列」だとわかります。
ルール② 「数値は 0~9 の数字を直接入力する」
これにより、次のように明確に区別できます。
0 "0"
数値 数字
このように、値を直接記述する方法を「リテラル」と呼びます。
Javaにはこのような、決められた書き方で表すデータの種類が豊富に用意されています。
Javaにはこのような、決められた書き方で表すデータの種類が豊富に用意されています。
データ型 | 例 | 説明 |
---|---|---|
int | 通常の整数表記 | 0, 10, 100, -50 |
long | Lまたはlを値の末尾に付与 | 0L, 1000L, -1234124l |
float | Fまたはfを値の末尾に付与 | 0.0F, 1.0F, -539.25f |
double | 小数点を付ける (Dまたはdを値の末尾に付与しても良いが省略可能) |
3.14, -3.51D, -2.5d |
char | シングルクォートで囲む | 'a', '1', 'B' |
boolean | true,falseのみ | true false |
String | ダブルクォートで囲む | "hoge", "fuga", "こんにちは" |
コラム
ビットとバイト
(準備中)
単精度浮動小数点数と倍精度浮動小数点数
(準備中)
Unicodeってなんだろう?
Unicodeは2バイト(16ビット)で一文字を表現する、世界中の文字を一つにまとめ、コンピュータで扱うための国際的な標準規格です。
Javaのchar型は、2バイト(16ビット)の整数型です。
元々は、この2バイトで1つの文字を表すことを意図していました。
しかし、Unicodeの規格が拡張され、21ビットで1文字を表す文字が出現したため、char型だけではすべての文字を表現できなくなってしまいました。
主に絵文字や古代文字など、通常の16ビット形式では表現できない文字を含んでいます。
これには、漢字や特殊記号、さまざまな言語の文字も含まれます。
しかし、Javaのchar型は16ビットまでしか表現できないため、21ビットの文字を扱うことができません。
つまり、char型は厳密には「文字」ではなく、「UTF-16コードユニット」と呼ばれる16ビットの値を表す型となってしまいました。
この問題を解決するために、Java 1.5で導入されたのが「Code Point」という概念です。
Code Pointは、Unicodeで文字に割り当てられた一意の番号であり、21ビットで表現できます。
Javaでは、int型を使ってCode Pointを扱うことができます。
Stringクラスなどには、Code Pointを扱うメソッドが色々追加されるようになりました。
https://www.ne.jp/asahi/hishidama/home/tech/java/string.html#h_code_point
元々は、この2バイトで1つの文字を表すことを意図していました。
しかし、Unicodeの規格が拡張され、21ビットで1文字を表す文字が出現したため、char型だけではすべての文字を表現できなくなってしまいました。
主に絵文字や古代文字など、通常の16ビット形式では表現できない文字を含んでいます。
これには、漢字や特殊記号、さまざまな言語の文字も含まれます。
しかし、Javaのchar型は16ビットまでしか表現できないため、21ビットの文字を扱うことができません。
つまり、char型は厳密には「文字」ではなく、「UTF-16コードユニット」と呼ばれる16ビットの値を表す型となってしまいました。
この問題を解決するために、Java 1.5で導入されたのが「Code Point」という概念です。
Code Pointは、Unicodeで文字に割り当てられた一意の番号であり、21ビットで表現できます。
Javaでは、int型を使ってCode Pointを扱うことができます。
Stringクラスなどには、Code Pointを扱うメソッドが色々追加されるようになりました。
https://www.ne.jp/asahi/hishidama/home/tech/java/string.html#h_code_point
trueとfalseって数値なの?文字列なの?何者なの?
C言語からプログラミング言語を勉強した方は、真偽値はfalseが0、trueが0以外と習うはずです。
Javaではtrueとfalseの真偽値リテラルはどのような値になっているのでしょうか?
System.out.println()で出力してみても、真偽値はtrue,falseしか表示されません。
Javaではtrueとfalseの真偽値リテラルはどのような値になっているのでしょうか?
System.out.println()で出力してみても、真偽値はtrue,falseしか表示されません。
boolean型の実態は
https://github.com/openjdk/jdk/blob/master/src/java.base/share/native/include/jni.h
にこのように定義されています。


このように符号無しの文字型として定義されており、falseは0、trueは1としてJVM上では定義されています。
https://github.com/openjdk/jdk/blob/master/src/java.base/share/native/include/jni.h
にこのように定義されています。


このように符号無しの文字型として定義されており、falseは0、trueは1としてJVM上では定義されています。
Javaで使用可能なリテラルの一覧
Javaで使用できるリテラル一覧 | ||
---|---|---|
データ型 | 例 | 説明 |
int | 通常の整数表記 | 0, 10, 100, -50 |
int(2進数) | 0bまたは0Bを値の先頭に付与する | 0B1010, 0b110001 |
int(8進数) | 0を値の先頭に付与する | 012, 077 |
int(16進数) | 0xまたは0Xを値の先頭に付与する | 0x4A, 0X3C, 0xff |
long | Lまたはlを値の末尾に付与 | 0L, 1000L, -1234124l |
float | Fまたはfを値の末尾に付与 | 0.0F, 1.0F, -539.25f |
double | 小数点を付ける (Dまたはdを値の末尾に付与しても良いが省略可能) |
3.14, -3.51D, -2.5d |
double, float(指数表記) | eまたはEを使用する | 2.5e3, 1.3E-4 |
char | シングルクォートで囲む | 'a', '1', 'B' |
boolean | true,falseのみ | true false |
String | ダブルクォートで囲む | "hoge", "fuga", "こんにちは" |
String(テキストブロック) | ダブルクォート3つで囲む | """Java13以降のテキストブロック""" |
参照型(nullリテラル) | 参照型変数のみに使用可能 | null |