Javaをはじめよう!第8回~変数の宣言と初期化を同時に行う&再代入~

2016/01/04

はじめに

前回は変数の宣言・初期化・参照について焦点をあててご紹介いたしました。

今回は、主に変数の宣言と初期化を同時に行う方法と、変数の値の再代入ついてご紹介いたします。

変数の使い方

変数の宣言と初期化を同時に行う

変数の宣言と初期化を同時に行うことができます。

Sample03.java

package chap02;

public class Sample03 {
	public static void main(String[] args){
		int i = 123 ; //int型変数iを宣言、123で初期化
		double d = 7.89; //double型変数dを宣言、7.89で初期化
		System.out.println(i);
		System.out.println(d);
	}
}
123
7.89

前回と全く同じが表示されました。変数の宣言と変数の初期化は、同時に行っても分けて行ってもまったく同じ結果になるということが確認できます。

変数は一つずつ宣言したり初期化したりする必要はありません。
次のソースを見て下さい。

Sample04.java

package chap02;

public class Sample04 {
	public static void main(String[] args){
		int a ,b , c; //int型変数a,b,cを同時に宣言
		a = 11;
		b = 22;
		c = 33;
		int d = 11,e = 22, f = 33; //int型変数d,e,fを宣言と初期化

		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println(d);
		System.out.println(e);
		System.out.println(f);
	}
}

実行例

11
22
33
11
22
33
  • まずint型の変数a,b,cを同時に宣言しています。同時に宣言できるのは同じデータ型の変数のみで、変数の間に『,』を入れ最後に『;』を記述します。そして今まで通りに値を代入しています。
  • 次に同時に宣言と初期化を同時に行っています。こちらも同様に同じデータ型の変数のみ同様に行うことができます。また、宣言のみ同様に変数と変数の間に、『,』を入れ、最後に『;』を記述します。

結果は、a,b,cもd,e,fも同じことが確認できます。

それでは、整数、浮動小数点、文字、文字列、論理値の初期化をしてみましょう。今までの整数と同じようにできます。

Sample05.java

package chap02;

class Sample05{
	public static void main(String[] args){
		int i = 123;			//int型のiを123で初期化
		double d = 12.345;		//double型のdを12.345で初期化
		char c = 'a';			//char型のcを'a'で初期化
		String s = ”xyz”;		//String型のsを"xyz"で初期化
		boolean b = true;		//boolean型のbをtrueで初期化

		System.out.println(i);
		System.out.println(d);
		System.out.println(c);
		System.out.println(s);
		System.out.println(b);
	}
}

実行例

123
12.345
a
xyz
true

今までの宣言と初期化の方法と同じように変数に代入できましたね。
実行例では、

  • 整数値のint型の『123』を表示。
  • 浮動小数値のdouble型の『12.345』を表示。
  • 一文字のchar型の『a』を表示。
  • 文字列のString型の『xyz』を表示。
  • 論理値のboolean型の変数『true』を表示。

しています。

変数の値の再代入

次に変数の値の入れ替え(再代入)について説明します。

Sample06.java

package chap02;

class Sample06{
	public static void main(String[] args){
		int i1 = 123;
		int i2;
		int i3;
		i2 = i1;					//i2にi1の値を代入
		i3 = i2;					//i3にi2の値を代入

		System.out.println(i1);
		System.out.println(i2);
		System.out.println(i3);

		i1 = 456;					//i1に456を代入
		i2 = i1;					//i2にi1の値を代入

		System.out.println(i1);
		System.out.println(i2);
		System.out.println(i3);
	}
}

実行例

123
123
123
456
456
123
  • 初期化されたi1の値をi2とi3に渡してi1,i2,i3の値を表示しています。結果は全部i1に初期化した123となりました。値の受け渡しができている証拠ですね。
  • 次に,i1の値を変更し、i1に代入してi1,i2,i3の値を表示しています。i1とi2の値を変更したので456と表示され,i3には新たに値を代入していないので、元のまま123と表示されます。

なぜこんな面倒なことをして値を表示しなければならないのでしょうか。そのままリテラルを表示すればよいのでは、と思う人もいるかもしれません。

なせ変数を使うのか

ここでなぜ変数を使うかということに注目してみましょう。
例えば次のソースを見て下さい。

Sample07.java

package chap02;

class Sample07{
	public static void main(String[] args){
		int i = 123;

		System.out.println(i);
		System.out.println(i);
		System.out.println(i);
		System.out.println(i);
		System.out.println(i);
	}
}

Sample08.java

package chap02;

class Sample08{
	public static void main(String[] args){
		System.out.println(123);
		System.out.println(123);
		System.out.println(123);
		System.out.println(123);
		System.out.println(123);
	}
}

実行例(Sample07.java & Sample08.java)

123
123
123
123
123

Sample07.javaとSample08.javaは、同じ結果になります。
Sample07.javaを図で表現すると

sansyou

先程のsample07.javaとSample08.javaの違いは何でしょうか。
sample07.javaは、変数を使って5回参照して値を参照しています。Sample08.javaは、リテラルで直接値を記述し、表示しています。
では、次に123の値を456に変えて見ましょう。

Sample07.java(変更後)

package chap02;

class Sample07{
	public static void main(String[] args){
		int i = 456;

		System.out.println(i);
		System.out.println(i);
		System.out.println(i);
		System.out.println(i);
		System.out.println(i);
	}
}

Sample08.java(変更後)<

package chap02;

class Sample08{
	public static void main(String[] args){
		System.out.println(456);
		System.out.println(456);
		System.out.println(456);
		System.out.println(456);
		System.out.println(456);
	}
}

実行例(Sample07.java & Sample08.java

456
456
456
456
456

実行結果はどっちも一緒ですね。

では、違いはどこにあるのでしょうか。
まず、123を456に変える労力が違います。Sample07.javaを変更するのは変数iの値を変えるだけで済みました。
しかし、Sample08.javaを変更するのは5回「456」を入力しなければなりません。
5回くらいならまだいいのですが、これが何十何百となった時、どちらを記述したいと思いますか。
変数を使う理由はわかって頂けたと思います。労力の違いというのはそのままプログラムの保守や管理の違いにつながります。一度、プログラムを書いてもそのままいつまでも使えることは滅多にありません。何度も付け足したり書き換えたり削除したりします。それらの労力=時間の節約に一役かっています。

もう一つ重要な点があります。先程の例でいうなら、Sample08.javaを変更するために5回入力したはずですが、絶対に間違えないという保証はありません
Sample07.javaを変更するのは、入力する回数が1回でいいので間違える確率が下がりますし、もし間違えたとしてもすぐに変更することができます。

さいごに

今回は、変数の初期化と宣言を同時に行う方法と、変数の値の再代入ついてご紹介させて頂きました。
次回は変数を使用した入力についてご紹介いたします。

投稿者情報

パンダマン

パンダマン

パンダマンです。

主にWebシステム開発等を担当しております。
設計・プログラミング。サーバー管理なんでもやります。

今、担当しているプロジェクトではJavaの今まで触れたことのないフレームワークを使うことになり勉強中です。
学生にC言語のプログラミングの基礎を教えたりもしています。
最近「キングダム」にはまっています。

>> パンダマンが執筆した他の記事を読む

法人向け人気レンタルサーバー
法人向け人気専用サーバー
個人向け人気レンタルサーバー