変数と型

変数

これまでの説明で、例えば画面に10という数値を出力するというプログラムを作ることはできるようになりました。 ここではさらに一歩進んで、ユーザーが入力した文字や数値を画面に表示するプログラムについて考えてみましょう。 プログラムを書いている時点では、ユーザーが何を入力するかということはもちろん分かりません。 ですから、

System.out.println(10);

のような書き方はできないのです。

そこでユーザーが入力するであろう「何か」を出力するように、

System.out.println( 「何か」 );

というふうに記述しておきます。そして、実行時にユーザーが入力した値をこの「何か」の中に入れてやれば、それが出力されるわけです。 この「何か」こそ変数(variable)と呼ばれるものなのです。 変数とは値を入れる箱のようなものであり、それは実際にはメモリ領域内の場所に他ならないのです。 つまり、変数に値を入れるということは、メモリ上の特定の場所に値を記憶するということなのです。

次のコードを題材に詳しく解説していきましょう。

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 星

変数には値を入れることができます。 この値には様々な(type)があります。 その中でも、整数を扱う型、実数を扱う型、論理値を扱う型、文字を扱う型をまとめて基本型(プリミティブ型)といいます。 整数や実数を扱う場合、メモリ上のサイズの違いによって、さらに細かく分かれています。 表にまとめておきましょう。

表 4-1 : Javaの基本型
種類 サイズ 範囲
byte 整数 8ビット -128(-27) 〜 127(27-1)
short 整数 16ビット -32768(-215) 〜 32767(215-1)
int 整数 32ビット -2147483648(-231) 〜 2147483647(231-1)
long 整数 64ビット -9223372036854775808(-263) 〜 9223372036854775807(263-1)
float 実数 32ビット ±1.4E-45 〜 ±3.4028235E+38
double 実数 64ビット ±4.9E-324 〜 ±1.7976931348623157E+308
boolean 論理値 1ビット trueまたはfalse
char 文字 16ビット \u0000 〜 \uFFFF

整数を扱う整数型にはbyteshortintlongがあり、64ビットのlongが最も大きな値を表すことができます。 実数を扱う浮動小数点型にはfloatdoubleがあり、doubleはfloatより精度の高い数を扱うことができます。

なぜこんなに多くの型があるのでしょうか。 整数型ならlongだけで、実数型ならdoubleでけでこと足りそうですよね。 しかし、世の中には、小さな整数しか使わないプログラムというのもあるのです。 そういうときにわざわざ64ビットものメモリ領域を使うのは無駄が有ります。 だから必要最小限なサイズの型を選び、貴重なメモリ領域を有効に利用できるようになっているわけです。

プログラム中に書かれた整数リテラルは、基本的にint型ですが、整数接尾語(integer type suffix)と呼ばれるlまたはLを末尾に付けた整数リテラルはlong型になります。

57       // int型
57L     // long型

浮動小数点リテラルは、浮動小数点接尾語(float type suffix)のdまたはDを末尾に付けるとdouble型、fまたはFを末尾に付けるとfloat型になります。 いずれも付けない場合はdouble型となります。

2.0      // double型
2.0d    // double型
2.0D    // double型
2.0f     // float型
2.0F    // float型

論理値を扱うbooleanはtrue(真)かfalse(偽)のいずれかの値しか取りません。

文字を扱うcharは、漢字などの2バイト文字を表すことができます。 ただし、1つのchar変数は1文字しか表しません。

ところで、文字列を扱うStringは基本型に含まれていません。 基本型はすべて小文字で始まっているのに、Stringは大文字で始まっています。 実はStringは参照型といって、基本型とは違うものなのです。 このことはクラスについて学ぶときにはっきり分かるでしょう。 ともあれ、String型の変数にも値を代入できるので、しばらくの間は基本型と同じような感覚で使っていっても問題はありません。

変数の宣言

実際に変数を使うためには、型と名前を指定して、変数を宣言する必要があります。 VariableSample01中の次の部分がそうです。ここではname, price, rateという3つの変数を宣言しています。

        String name;//商品名
        int price;//値段
        double rate;//評価 

Stringは文字列を扱う型、intは整数を扱う型、doubleは実数を扱う型でしたね。

変数の宣言は、一般には次のような形になります。

構文 : 変数の宣言
型名 変数名;

ただし、

int x;
int y;

のように、同じ型の複数の変数を別々に宣言する代わりに、

int x, y;

というふうに、複数の変数をカンマ(,)で区切ることにより、まとめて宣言することができます。

変数を宣言すると、メモリ上に値を入れる箱のようなもの(記憶領域)が確保され、実際に変数を利用することができるようになります。

図 4-1 : 変数の宣言