Javaに限らず、大多数のプログラミング言語には変数というものが用意されている。
変数は何らかのデータを入れておく箱のようなものと考えれば良い。
実際には、ある変数はメモリ上の決まった領域を確保し、そこにデータが格納される。
Javaのプログラム中で変数を使う場合、その変数を「宣言」する必要がある。 宣言するとは、変数の名前(変数名)と変数の型を書いて「今からこういう変数を使いますよ」と Javaコンパイラに教えてあげることである。
たとえば、int型(整数型)の abcという名前の変数を使うと いう場合は、以下のように宣言する。
int abc;
public class IntTest {
public static void main(String[] args) {
int abc;
}
}
int abc; 以外の行は、当面どのプログラムでも同じである、いわば「決り文句」であるので、
このように敢えて書かないことがある。これは教科書も同様である。ただし、クラス名(この場合IntTest)はファイル名と一致しなければならないことに注意せよ。
変数名は自分で好きな名前がつけられるが、どんな名前でもつけられるわけではない。 Javaでつけられる名前は、
また、変数には使う目的があるはずである。変数名には使う目的に合った名前を付けるべきである。 他人が見て意味がまったく分からない変数名は使うべきでない。 また、原則として短すぎる変数名は、目的が分かりにくいので使うべきではない。 ただし、慣例として1文字の変数名が使われることが多い。 たとえば、a,b,c,d,e…(一般的な変数) i,j,k(繰り返しで用いる) m,n(配列の大きさなど) x,y,z(座標系で用いる) などがある。
以上、変数名の説明をしたが、Javaではそれ以外にも、クラス、メソッド、ラベル、パッケージといったものに 名前を付ける。変数名も含めてこれらの名前のことを識別子(identifier)という。これら識別子の名前の付け方は 変数と同様である。詳しくは教科書を参考のこと。
以上で説明した変数には、「代入」と「参照」という操作が行える。 代入とは変数に値(データ)を入れることである。 また、参照とは変数の値を得ることである。 いわば、代入は変数への入力、参照は変数からの出力とも言える。
変数に値を代入する場合は、たとえば以下のようにする。
int c; // 整数型の変数cを宣言する c = 100; // 変数cに100を代入する
代入には、= を使う。= の左辺(左側)に変数名を、右辺には値を書く。 右辺に書いた値が左辺の変数に代入されるのである。 数学の = とはまったく意味が違うので注意せよ。
また、参照するには単にその変数名を書けば良い。 例えば、変数bに入っている値を画面に表示するには、以下のようにする。
int b; // 整数型の変数bを宣言する b = 50; // 変数bに50を代入する System.out.print("b = "); // "b = "と表示する System.out.println(b); // 変数bの値を参照して表示する
ちなみに、以上のプログラムの3行目と4行目を、以下のように1つにまとめることができる。
int b; // 整数型の変数bを宣言する b = 50; // 変数bに50を代入する System.out.println("b = " + b); // "b = " と変数bの値を参照して表示する
変数の値を他の変数に代入することもできる。以下の例は変数bの値(50)を参照して変数cに代入している。
int b, c; // 整数型の変数bとcを宣言する b = 50; // 変数bに50を代入する c = b; // 変数bの値を(参照して)変数cに代入する System.out.println("c = " + c); // "c = "と変数cの値を表示する
変数の値を参照して、その値を使って同じ変数に代入することもある。
int a; a = 40; a = a + 50; System.out.println("a = " + a); // "a = "と変数aの値を表示する
a = a + 40 という書き方を奇妙に感じるかもしれないが、このような書き方は良く使われる。 数学の = とは違う意味であることに慣れて欲しい。 この文は、変数aの値を参照(この場合40)して、それに50を足した値、つまり90をaに代入する。 言いかえれば、変数aの値を50増やす処理である。
なお変数の宣言と一緒に代入を行うことができる。これを変数の初期化という。例えば、直前のプログラムは以下のように書ける。
int a = 40; // 変数aを宣言して40を代入する a = a + 50; System.out.println("a = " + a); // "a = "と変数aの値を表示する
以上で上げた変数はすべてint型(整数型)であった。Javaではint型以外にも以下のデータ型が用意されている。
型の名前 意味 int 整数型 32ビット符号つき(-2147483648〜2147483647) long 整数型 64ビット符号つき(-9223372036854775808〜9223372036854775807) short 整数型 16ビット符号つき(-32768〜32767) byte 整数型 8ビット符号つき(-128〜127) char 文字型 16ビット符号なし(Unicode) float 浮動小数点数型 32ビット浮動小数点数(IEEE754-1985) double 浮動小数点数型 64ビット浮動小数点数(IEEE754-1985) boolean 論理型 true または false
※ この他に参照型とnull型もある
Javaでは変数は特定の型を持ち、その変数にはその型の値しか入れることができない。
例えば、int型の変数にはint型の値しか入れることができない。他の型の値を代入しようとすると、
自動的にint型に変換される。これを暗黙の型変換という。
ただし、暗黙の型変換は、小さい型の値から大きい型への変換のみである。
大きい型の値から小さい型への変換は自動的にはされない。
ちなみに型の大小関係は以下のようになっている。
double > float > long > int > short > byte
つまり、小さい型の値から大きい型の変数に代入することはできるが、
大きい型の値を小さい型の変数に代入できない。
ただし、shortとbyteはかならずint型の値に変換されるため、short, byte, intの間では問題は生じない。
どうしても、大きい型の値を小さい型の変数に代入したい場合には、キャストを使う。 例えば以下のようにする。
int i; long l; l = 100L; // long型の変数lに100を代入する。 i = (int)l; // long型の変数lの値をint型に変換(キャスト)してから変数iに代入する System.out.println("i = " + i); // "i = "と変数iの値を表示する
ある決まった値、つまり定数の書き方を説明する。定数を表現するものをリテラルという。 書き方はデータ型によって異なる。
通常は 123, 1024 という風に書く。この場合10進数とみなされる。 0で始めると8進数とみなされる(例: 0774 0644)。また、0xで始めると16進数とみなされる(例: 0xff 0x8a00)。
long型の定数にしたい場合は、数値の後にLもしくはl(小文字のL)を使う(例:10L 999L)。 小文字のLは数字の1と間違いやすいので使わないほうが良い。
1文字だけを表す。'(シングルクォート)で囲む(例: 'a' 'b' '0' 'Z')。 特殊な意味を表すエスケープシーケンスは以下のとおり。例えば、'\n'のように使う。
文字 意味 \n 改行 \t タブ \b バックスペース \r 復帰 \f 改ページ \\ \ \' シングルクォート \" ダブルクォート \ddd ASCII文字コード(8進数で0〜377の範囲) \uxxxx Unicode(16進数で0000〜ffffの範囲)
複数の文字の集まりを示す。1文字や0文字ということもある。
"(ダブルクォート)で囲む(例: "The world")
0文字(空文字列)は "" と書く。
エスケースシーケンスを中に書くことができる(例: " 1st line \n 2nd line")。
小数点を持つ。10進数で表される(例: 10.23 10.0 10. 0.25 .25)。
指数表現が使える(例: 3.14e4 (=3.14×10の4乗=31400) 3.21e-3 (=3.21×10の-3乗=0.00321)
数値の後ろにFまたはfをつけるとfloat型、Dまたはdをつけるとdouble型の定数であることを表す。
論理型の定数としてtrue (真)、 false (偽) がある。また、どこも参照していないことを示すnullがある。