変数の宣言、代入

4.4 変数の宣言、代入

 ここからはいよいよ、プログラムの中でどのように変数を扱うかを学んでいきます。
 前述したように、1 つの変数には決まったデータ型のデータしか入りません。
 下の図のように、int 型の変数には int 型の値(整数)、char 型の変数にはシングルクォーテーションで囲った 1文字しか入れることができません。

図 4.4.1 : 正しい変数宣言の例


図 4.4.2 : 正しくない変数宣言の例


 プログラムでは変数を使う前に、 「変数の名前」と「変数の型」を指定する必要があります。これを変数の宣言と言います。
 変数の宣言の基本構文は下記の通りです。

 例えば、凡例の場合は、次の図 4.4.3 のようなイメージになります。

図 4.4.3 : 変数宣言(メモリ領域の確保)


 変数を宣言すると、コンピュータのメモリ上にデータを保存する領域が確保されます。これで値を入れる「箱」ができたわけですが、この状態ではまだ箱の中は空のままです。
 箱(変数)の中に値を入れるには、代入演算子「=」を使用します。
 基本構文は下記の通りです。

 例えば、int 型の変数 x を宣言した後、凡例の文が実行される場合は図 4.4.4 のようなイメージになります。

図 4.4.4 : 変数の値の代入


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


 例えば、int 型の変数 x を宣言し、同時に 10 を代入する場合は以下のようになります。

図 4.4.5 : 変数宣言と初期化


 下記の 2 つの書き方は、どちらも同じことを行っています。

方法① :変数の宣言と代入を別に行う。
 int x;
 x = 10;

方法② :変数の宣言と代入を同時に行う (変数の初期化という)
 int x = 10;

ポイント

 ・ 変数、必ず 1 つの型を持つ。
 ・ 変数を新たに作成する時、必ず型を宣言する。
 ・ 型の宣言、変数ごとに 1 回のみである。
 ・ 変数決められた型の値しか入れることできない。

4.4.1 変数を宣言し、値を代入するプログラム

 それでは、変数を宣言し、値を代入するプログラムを作成してみましょう。
 これは、String 型、double 型、int 型、char 型の変数にそれぞれ値を代入し、値をコンソールに表示するプログラムです。作成し、実行結果を確認して下さい。

① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch4
③ 名前 :Variable
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

package jp.co.f1.intro.ch4;

public class Variable {

  public static void main(String[] args) {
  
    //名前を管理する変数
    String name;
    name = "神田タロー";
    
    //身長を管理する変数
    double height;
    height = 167.9;
    
    //年齢を管理する変数
    int age;
    age = 25;
    
    //血液型を管理する変数
    char blood;
    blood = 'A';
    
    System.out.print(name);
    System.out.print("さんの身長は");
    System.out.print(height);
    System.out.println("cm です。");
    
    System.out.print("年齢は");
    System.out.print(age);
    System.out.println("歳です。");
    
    System.out.print("血液型は");
    System.out.print(blood);
    System.out.print("型です。");
   
  }
} 

実行結果

解説

 このプログラムでは、4 つの変数を宣言し、それぞれに値を代入しています。また、その値をコンソールに表示させています。
 8 行目で String 型の変数 name を宣言します。この時のイメージは図 4.4.6 になります。9 行目では、宣言した変数 name に「神田タロー」という文字列の値を代入しています。
   8: String name;
   9: name = "神田タロー";

図 4.4.6 : String 型の変数 name の宣言時


 12 行目では、double 型の変数 height を宣言します。そして、13 行目で変数 height に 167.9 という値を代入しています。12 行目のイメージは図 4.4.7、13 行目は図 4.4.8 になります。
   12: double height;
   13: height = 167.9;

図 4.4.7 : double 型の変数 height の宣言


図 4.4.8 : 変数 height への値の代入


 16 行目で、int 型の変数 age を宣言しています。17 行目で、変数 age に 25 を代入しています。図 4.4.9 は、変数 age に 25 が代入されるイメージ図です。
   16: int age;
   17: age = 25;

図 4.4.9 : 変数 age への値の代入


 20 行目は、char 型の変数 blood を宣言しています。21 行目では変数 blood に文字’A’を代入しています。この時のイメージは図 4.4.10 になります。
   20: char blood;
   21: blood = 'A';

図 4.4.10 : 変数 blood への値の代入


 続いて 23~26 行目までの 4 行の記述で「神田タローさんの身長は 167.9cm です。」という一行を表示させています。
 23 行目以降の「System.out.print メソッド」と「System.out.println メソッド」は、共に括弧の中身を表示させるメソッドです。これらの 2 つには、「改行」をするかしないかの違いがあります。
 ・System.out.print()メソッド:括弧の間の情報を画面に表示する。
 ・System.out.println()メソッド:括弧の間の情報を画面に表示し、「改行」を行います。
 println の「ln」は「line」の略で、「改行するライン」という意味があります。
 (メソッドに関する詳しい仕組みについては、9 章で解説します。)

 23 行目は、System.out.print メソッドの後ろの括弧の中に入れた変数 name を表示させています。変数 nameは「神田タロー」の参照が代入されているので、「神田タロー」と表示されます。
 24 行目は、「さんの身長は」という文字列を表示させています。
 25 行目は、変数 height の値を表示させています。変数 height の値は 167.9 なので、ここでは「169.7」が表示されます。このイメージは図 4.4.11 になります。
 26 行目は、「System.out.println メソッド」を使っています。これは、括弧の中に入れた文字列を表示させた後改行するものですので、「cm です。」という文字列を表示させた後に改行しています。
   23: System.out.print(name);
   24: System.out.print("さんの身長は");
   25: System.out.print(height);
   26: System.out.println("cm です。");

図 4.4.11 変数 height の表示


 同じように、28~30 行目までの 3 行で 1 つの文章を表示させています。
 28 行目では「年齢は」と表示し、29 行目は変数 age の値である「25」を表示、30 行目は println メソッドなので「歳です。」という表示をさせて、その後に改行します。29 行目のイメージ図は図 4.4.12 になります。
   28: System.out.print("年齢は");
   29: System.out.print(age);
   30: System.out.println("歳です。");

図 4.4.12 : 変数の値の参照(表示)


4.4.2 変数を初期化せずに表示させるプログラム

 変数を宣言した後、値を代入せずに表示させようとした場合はどうなるのでしょうか。
 変数に値を代入しないまま表示させようとするテストプログラムを作成し、実行結果を確認してみましょう。

① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch4
③ 名前 :VariableWithNoValue
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ VariableWithNoValue.java

package jp.co.f1.intro.ch4;

public class VariableWithNoValue {

    public static void main(String[] args) { 

       //名前を管理する変数
       String name;
       name = "神田タロー";
       
       //身長を管理する変数
       double height;
       height = 167.9;
       
       //年齢を管理する変数
       int age;
       age = 25;
       
       //血液型を管理する変数
       char blood;
       blood = 'A';
       
       //体重を管理する変数
       double weight;
       
       System.out.print(name);
       System.out.print("さんの身長は");
       System.out.print(height);
       System.out.println("cm です。");
       
       System.out.print("年齢は");
       System.out.print(age);
       System.out.println("歳です。");
       
       System.out.print("血液型は");
       System.out.print(blood);
       System.out.print("型です。");
       
       System.out.print("体重は");
       System.out.print(weight);
       System.out.println("です。");
       
    }
}

結果

 上記のプログラムを作成し保存すると、コンパイルエラーの印が表示されます。コンパイルエラーが発生しているので実行することができません。
 下の図で、①と②の枠で囲ったところが、コンパイルエラーが発生している箇所です。②の赤い波線にマウスポインタを合わせ、コンパイルエラーメッセージを確認して下さい。


解説
 このサンプルプログラムは、前に作ったプログラムに体重を管理する変数 weight を加えたものです。
 8~24 行目で、5 つの変数を宣言し、double 型の変数 weight 以外はそれぞれの変数に値を代入しています。
   8: String name;
   9: name = "神田タロー";
   12: double height;
   13: height = 167.9;
   16: int age;
   17: age = 25;
   20: char blood;
   21: blood = 'A';
   24: double weight;


 このdouble型の変数weightは、宣言をしているだけで値を代入していません。そのため、「ローカル変数 weight が初期化されていない可能性があります。」というコンパイルエラーが発生します。つまり、変数 weight という箱に何も入っていない(初期化されていない)状態なので、中身を表示することができないのです。

図 4.4.13 : 初期化されていない(一度も値が代入されていない)変数


変数の初期化とは

変数を宣言したときに、同時に変数に値を代入することを、「変数の初期化」と言います。


NEXT>> 4.5 変数の値の変更