変数への値の代入
変数への値の代入
さて、再びVariableSample01のコードに戻りましょう。
VariableSample01.java(再掲)
class VariableSample01 { public static void main(String[] args){ String name;//商品名 int price;//値段 double rate;//評価 name = "本"; price = 2000; rate = 4.2; System.out.println("商品名: " + name); System.out.println("値段: " + price + " 円"); System.out.println("評価: " + rate + " 星"); } }
VariableSample01の実行結果(再掲)
商品名: 本 値段: 2000 円 評価: 4.2 星
次の部分では変数に商品名、値段、評価などの具体的な値を代入しています。
name = "本"; price = 2000; rate = 4.2;
「A=B」は、数学では「AとBが等しい」という意味になりますが、Javaでは「BをAに代入する」という意味になります。 つまり、これ以降Aというものは、実はBと同じものを表していることになるのです。このことから、Javaでは=を代入演算子ともいいます。 変数に値を代入すると、新しい値が代入されるまでは、もとの値が記憶されています。

尚、次のように型宣言のについでに代入(初期化)することもできます。
VariableSample01A.java
class VariableSample01A { public static void main(String[] args){ String name = "本";//商品名 int price = 2000;//値段 double rate = 4.2;//評価 System.out.println("商品名: " + name); System.out.println("値段: " + price + " 円"); System.out.println("評価: " + rate + " 星"); } }
VariableSample01Aの実行結果はVariableSample01と全く同じです。
型宣言と代入(初期化)を同時に行う構文は、一般には次のような形になります。
構文 : 変数の型宣言と代入(初期化)
型 変数名 = 初期値;
もちろん、
int x = 10; int y = 20;
のように、同じ型の複数の変数を別々に宣言、初期化する代わりに、
int x = 10, y = 20;
というふうに、複数の変数をカンマ(,)で区切ることにより、まとめて宣言、初期化することができます。
さて、VariableSample01(またはVariableSample01A)の最後で、何やら出力している部分がありますね。
System.out.println("商品名: " + name); System.out.println("値段: " + price + " 円"); System.out.println("評価: " + rate + " 星");
この時点ではString型の変数nameは"本"という文字列を表します。だから
"商品名: "+name
は
"商品名: "+"本"
ということになります。文字列と文字列を足し算の記号で結んでいます。 すると、次のように連結されて、一つの文字列になるのです。
"商品名: 本"
このようにして実行結果の1行目が出力されたのです。
次の
"値段: "+price+" 円"
は、priceに2000が代入されているので、まず
"値段: "+2000+" 円"
ということになりますが、2000という数値を文字列に変換して、次のように見なします。
"値段: "+"2000"+" 円"
この結果、次のようなつながった一つの文字列を表すことになります。
"値段: 2000 円"
最後の
"評価: "+rate+" 星"
についても同様です。
以上のような処理を経て、実行結果が得られたのです。
Javaでは=は「代入」を意味する。
尚、次のように、まだ値が代入されていない変数から値を取り出そうとすると、コンパイルエラーが発生してしまいます。
VariableSample01B.java
class VariableSample01B { public static void main(String[] args){ String name;//商品名 int price;//値段 double rate;//評価 System.out.println("商品名: " + name); System.out.println("値段: " + price + " 円"); System.out.println("評価: " + rate + " 星"); } }
変数への新しい値の代入
既に値が代入されている変数に、新しい値を代入して上書きすることができます。
VariableSample02.java
class VariableSample02 { public static void main(String[] args){ int val; val = 1; System.out.println("最初のval = " + val); val = 2; System.out.println("新しいval = " + val); } }
VariableSample02の実行結果
最初のval = 1 新しいval = 2
変数への変数の代入
変数に代入できるのは値だけではありません。変数を代入することもできるのです。
次のコードを実行してみましょう。
VariableSample03.java
class VariableSample03 { public static void main(String[] args){ int a1, s1; a1 = 1; s1 = a1; System.out.println("a1= " + a1); System.out.println("s1= " + s1); } }
VariableSample03の実行結果
a1= 1 s1= 1
まず
int a1, s1;
の部分ですが、これは
int a1; int s1;
という2つの変数の宣言を1つにまとめたものです。同じ型の複数の変数は、このようにまとめて宣言することができるのでしたね。
その次の
a1 = 1; s1 = a1;
では、まずa1に1という値を代入してから、a1をs1に代入しています。予めa1に1が入っているので、s1にも1が入ることになります。このように変数に変数を代入することもできるのです。
異なる型の変数への代入
次のコードをコンパイルしてみましょう。エラーが発生して、コンパイルできないはずです。
VariableSample04.java
class VariableSample04 { public static void main(String[] args){ int pi; pi = 3.14; System.out.println("円周率= " + pi); } }
原因はint型の変数に浮動小数点数リテラル(小数)を代入しようとしていることです。このように、精度が落ちてしまうような代入をしようとした場合は、コンパイルできません。
intをdoubleに修正すればコンパイルできるようになります。そして実行結果は次のようになります。
VariableSample04の実行結果
円周率= 3.14
もう一つの例を見てみましょう。やはりこれもコンパイルできません。
VariableSample05.java
class VariableSample05 { public static void main(String[] args){ int a; a = "文字列"; System.out.println("a= " + a); } }
今度の原因はint型の変数に文字列を代入しようとしていることです。このように互換性のない変数へ代入しようとした場合も、コンパイルできません。
intをStringに修正すればコンパイルできるようになります。そして実行結果は次のようになります。
VariableSample05の実行結果
a= 文字列
代入するときは型に注意