変数を理解する。

変数を理解するには、何が必要かを考えた時、よく箱のイメージで、その箱に数字を入れるといった説明を受けると思います。
私の場合理解力が悪く、なかなかイメージがつきませんでした。
変数を理解するために、「う〜ん」と悩んだすえ、やっぱりメモリ上でどんな動きをしているかを説明したほうがいいかなと思ったので ちょっとメモリの図なんかを使用して説明しようと思います。
Java-Time Javaの基本 オブジェクト指向 Jsp-Servlet-bean JavaXml デザインパターン 本の紹介

簡単な変数のソース

Javaでの基本的な変数のソースを紹介します。
基本的とはいっても、変数の型には、こんなのがあって、デフォルト値は、いくつだのと言ったことは、ここではやりません。
とりあえず、変数ってのは、こうやって「宣言」されてメモリ上で領域を確保されるといった感じを感じてもらえればと思います。
簡単なプログラム
------ Variable01.java -------------

public class Variable01 {
	public static void main(String[] args) {
		int x;
		int y;
		int z;

		x = 1;
		y = 2;
		z = x + y;

		System.out.println("x = "+ x);
		System.out.println("y = "+ y);
		System.out.println("z = "+ z);
	}
}
------ Variable01.java -------------

実行結果----------------------------

x = 1
y = 2
z = 3

------------------------------------

なんとなくわかりましたか?
ではプログラムを順をおって追っていきましょう。



		int x;         ----------------integer 型の変数の x を作成しました。
		int y;         ----------------integer 型の変数の y を作成しました。
		int z;         ----------------integer 型の変数の z を作成しました。

		x = 1;         ----------------変数 x に1を代入しました。
		y = 2;         ----------------変数 y に2を代入しました。
		z = x + y;     ----------------変数 z に(x+y)を代入しました。

		--------変数内の値の表示---------------

		System.out.println("x = "+ x);
		System.out.println("y = "+ y);
		System.out.println("z = "+ z);
				
int x;     integer型の変数 x を作成しました。
と ありますがいったいどういうことなのでしょうか?

Java 変数の宣言

Javaでは、変数を利用する時に必ず「宣言」をします。
一部のプログラムでは、変数を宣言しなくてもよい言語もありますが、Javaでは、必須です。

-------------------変数を宣言する--------------
int x;
-----------------------------------------------
int は、Integer 整数の略です。これが「型」とよばれるもので、この「型」を宣言することによりメモリ上で「型」にそったメモリの領域を確保します。

図をコンピュータ内にあるメモリと考えて下さい。
少しハードの話になるのですが、「コンピュータでプログラムを実行する」と言う事は、メモリ上にデータの領域を確保し、そのデータを処理(+とか−)することをいいます。
つまり、メモリ上に、4byte分領域を確保して、その確保した領域を[x]と呼ぶといったことを、「宣言」します。
では、他の「型」では、何byte宣言されるのでしょうか?
下記にJavaで使用される「型」を表としてまとめてみました。
型名 サイズ 値の範囲
整数 byte 1bytes -128〜+127
short 2bytes -32768〜+32767
int 4bytes -2147483648〜+2147483647
long 8bytes -9223372036854775808〜+9223372036854775807
浮動少数 float 4bytes ±3.40282347E+38〜±1.40239846E-45
double 8bytes ±1.79769313486231570E+380〜±4.94065645841246544E-324
文字 char 2bytes 0〜65535(Unicode表現)
論理 boolean (1bytes) true/false

doubleでは、8byteのメモリの領域が確保される事がわかります。
では、次のソースを見てみましょう。
------------Variable01.java------------------

class Variable01 {
	public static void main(String[] args) {
		int x;

		System.out.println(" x = " + x);
	}
}
------------Variable01.java------------------
			
このソースをコンパイルすると「変数xは、初期化されていない可能性があります」というエラーが表示されます。
「初期化」とはいったいどういったことなのでしょうか?

Java 変数を初期化する。

変数の宣言で、変数を宣言することは、メモリ上にその「型」にそった領域を確保することだと理解できたと思います。
しかし、宣言するだけでは変数は使用することはできません。
ここでは、変数を初期化し、変数を利用します。

------------Variable01.java------------------

class Variable01 {
	public static void main(String[] args) {
		int x;
		x = 1;

		System.out.println(" x = " + x);
	}
}
------------Variable01.java------------------
-- コマンドプロンプト --
c:>java Variable01              ------実行

1

c:>
						
「初期化」されて、1を表示しました。
何となくわかりましたか?
「初期化」は、「宣言」した変数にたいして、何らかのデータを挿入することをです。
Javaでは、変数を「宣言」したら、変数にデータを入れないで実行しようとするとエラーを返します。
数学で習った代入みたいなものです。

さてここでメモリの中をみてみましょう。

00 00 00 01 のデータが挿入されています。
ここで少し、考えていただきたいのですが、もしこの変数を「宣言」するときにint(Integer)ではなく、byteや、shortで「宣言」していたら同じ値になったでしょうか?
byte x;  の場合

short x;  の場合


何が違うのかがわかって頂けたでしょうか?
実際に表示させると同じ1を表示するのですが、まずメモリ上に確保された領域が違います。さらに使用している、領域も違います。

変数のまとめ


メモリ上に「型」にそった領域を確保します。  −−−−−−−−−「宣言」
「宣言」した領域上にデータを挿入します。  −−−−−−−−−−「初期化」

ここで説明した「型」はプリミティブ(原始的)型と呼ばれる基本的な「型」です。
これらの「型」は、CPUから直接メモリの内容を読み書きして計算されます。
他にも、「クラス型」や、「参照型」といった型がありますのでそのつど説明していきたいと思います。

←もどる Home 次へ→