変数とデータ型
変数とは?
変数とは、「データを入れる箱のようなもの」です。データとは、「プログラムの中で扱う値や状態」のことです。値や状態を覚えておく場所として変数を使います。
この変数には、「a」という名前がついています。変数名と言います。aという名前の変数経由でメモリを操作している、ということです。
具体的には、データを保存する場所はコンピュータ内のメモリという記憶装置になります。メモリのどこにデータが格納されているかはアドレスから判定しますが、プログラムではアドレスを意識する必要はありません。
「データを入れる箱」には名前をつけることができるのです。名前のついた変数を操作することで、メモリにアクセスすることができるのです。
値や状態は状況によって変化します。保存するデータは何度も書き換えることができるので「変数」と言います。
データ型
データ型とは、変数に保存するデータの種類のことです。Javaで変数を使用するにはデータ型を意識する必要があります。
※ Java10より型推論が利用できるようになりましたが、本講座では割愛させていただきます。
基本データ型
値を単体で保存するためのデータ型です。データ型は4種類で8つのデータ型があります。同じ種類にある複数のデータ型の違いはサイズです。変数の箱の大きさが異なるイメージで、「表現能力が違う」ということです。
種類 | データ型 | サイズ | 値の範囲 |
整数 | byte | 8ビット(1バイト) | -128〜127 |
short | 16ビット(2バイト) | -32,768〜32,767 | |
int | 32ビット(4バイト) | -2,147,483,648〜2,147,483,647 | |
long | 64ビット(8バイト) | -9,223,372,036,854,775,808〜9,223,372,036,854,775,807 | |
浮動小数点 | float | 32ビット(4バイト) | ±3.40282347E+38〜±1.40239846E-45 |
double | 64ビット(8バイト) | ±1.79769313486231570E+308〜±4.94065645841246544E-324 | |
文字 | char | 16ビット(2バイト) | 0〜65,535 |
真偽値 | boolean | (JVMの実装による) | true または false |
- 整数
4つのデータ型があります。違いはサイズです。保存できる値の範囲が異なります。整数のデフォルトはint型になります。
- 浮動小数点
2つのデータ型があります。浮動小数点のデフォルトはdouble型になります。
- 文字
1文字を格納するためのデータ型です。「’」(シングルクォーテーション)で括られた1つの文字を保存することができます。内部的には数値として扱われます。参照型の文字列とは異なるデータ型です。
- 真偽値
真か偽かを保存するためのデータ型です。値はtrueまたはfalseの2種類になります。後述の分岐や繰り返しの制御文で利用されます。
参照型
値を単体ではなく、構造物として保存するデータ型のことを参照型と言います。後述の配列やクラスなどがそれにあたります。
Javaの扱えるメモリには
- スタック
- 小さなメモリ領域
- ヒープ
- 大きなメモリ領域
例えば、以下のような変数を宣言するプログラムがあるとしましょう。
基本データ型のintの変数iに10を代入すると、スタック領域に変数iの箱が作られ、この箱の中に値10が入ります。参照型のStringの変数strに”あいうえお”を代入すると、スタック領域に変数strの箱が作られます。“あいうえお”はヒープ領域に実体が作られ、ここに保存されます。この実体はメモリの1001番地のアドレスに保存されていたとしましょう。変数strの箱にはアドレス1001が代入されます。1001番地の実体を参照するようになります。変数は、メモリの実体を参照しているということです。
文字列
文字列のデータ型は基本データ型ではなく参照型の1つ、String型になります。「“」(ダブルクォーテーション)で括られた文字データのことです。”あいうえお”のような文字群の事で参照型の1つです。char型とは異なりますので注意してください。
変数の操作
変数の宣言
変数の宣言にはデータ型と変数名を指定します。命令文の終わりには必ず「;」(セミコロン)を指定します。
int型のaという名前の変数を宣言するには、
と記述します。メモリ内に4バイトの領域が確保され、aという名前でアクセスできるようになります。
値の代入
変数に値を保存することを「代入」と言います。
「=」という記号を使います。「=」はプログラミングの世界では代入という意味になります。
宣言済みのint型の変数aに数値100を代入しています。
変数の初期化
変数に、初めて値を代入することを「初期化」と言います。
変数の宣言と同時に初期化することができます。
変数への再代入
すでに値の入っている変数に別の値を代入することが可能です。
変数同士の代入
変数同士の代入も可能です。
dとeの値はどちらも150になります。
値の参照
変数(メモリ)から値を取り出して利用することを「参照」と言います。
System.out.printlnという命令文で、標準出力(System.out)に出力するという処理です。この例だと1000が出力されます。
変数とデータ型のルール
変数の命名
変数名はプログラマーが自由につけることができます。以下のようなルールがあります。
- 英数字と「_」(アンダースコア)と「$」(ドルマーク)が使用可能
- 数字は1文字目に使えない
- 予約語は使えない
データ型の変換
あるデータ型の値を別のデータ型に変換する操作を型変換と呼びます。Javaでは、以下の3種類の型変換があります。プログラムで演算をする際のデータ型のルールです。
- 暗黙の型変換
表現力の小さなデータ型の値を表現力の大きなデータ型の変数に代入する際に自動的に行われる型変換の事
数値10はint型の値です。サイズの大きなlong型に変換可能です。さらに、long型の値は、小さなサイズのfloat型に変換可能です。longは整数、floatは浮動小数点で、longの方がサイズは大きいですが、floatは指数表記(E+38)でlongの値範囲を表現できるので、型変換が可能となります。
💡 ただし丸めが生じる可能性あり。
- 明示的な型変換
大きなデータ型の値を小さなデータ型の変数に代入する場合、明示的な型変換が必要です。
の記述で型変換する事をキャストと言います。内のデータ型は、変換先のデータ型を指定します。
- 演算による型変換
- データ型が同じであれば演算結果も同じになる
- 整数型の異なるデータ型同士の演算では、大きいデータ型に合わせられる
- 整数と浮動小数点の演算では、浮動小数点型に型変換される
データ型が異なる値同士の演算がスムーズに行えるように、Javaが自動的に型変換を行うことがあります。
実行結果
実行結果
実行結果