変数への値の代入

変数への値の代入

さて、再び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では=を代入演算子ともいいます。 変数に値を代入すると、新しい値が代入されるまでは、もとの値が記憶されています。

図 4-2 : 変数への値の代入

尚、次のように型宣言のについでに代入(初期化)することもできます。

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= 文字列

代入するときは型に注意