Javaでは全ての変数にその変数の型を指定する必要があります Javaで扱うことができる変数は基本データ型と参照型があります 今回は基本データ型を紹介します
| 型名 | 解説 | 代入例 |
|---|---|---|
| boolean | 真理値を入れることができます | boolean b = true |
| int | 32bit整数を入れることができます | int i = 1 |
| long | 64bit整数を入れることができます | long l = 1 |
| float | 32bit実数を入れることができます | float f = 1.0 |
| double | 64bit実数を入れることができます | double d = 1.0 |
| char | 文字を一文字を入れることができます | char c = 'a' |
変数を宣言するには 型名 変数名 で宣言します。
int number;このような宣言をすると初期値が自動的に設定されます。 また基本データ型の初期値はこのようになっています
| 型名 | 解説 |
|---|---|
| boolean | false |
| int | 0 |
| long | 0l |
| float | 0.0f |
| double | 0.0d |
| char | '\n0000' (null文字) |
また、宣言する際に
型名 変数名 = 値と置くと変数を宣言すると同時に初期値を決めることができます
int number = 100;リテラルとは基本データ型の値や文字列をコードに記述する際の表現方法のことです 例えば同じ整数でもコード上で2進数を表したいときや、少数を記述する際に指数表現を使いたい時に使われます。
| リテラルの種類 | 型 | 記述方法 |
|---|---|---|
| 整数(10進数) | int | 数字を列挙する |
| 整数(16進数) | int | 数字の前に0xをつける |
| 整数(2進数) | int | 数字の前に0bをつける |
| 整数 | long | 数字の最後にLをつける |
| 小数 | double | 小数を列挙する |
| 小数(指数表現) | double | 指数表現 |
| 文字 | char | シングルクォートで囲む |
| 文字列 | String | ダブルクォートで囲む |
*Java 7 以降は数値リテラルの中にアンダーバーを含むことができます 3桁ごとに入れることによって、見やすくすることができます
記述例:
int a = 120; // a = 120
int b = 0x1a; // b = 26
int c = 0b1101; // c = 13
long d = 18_000_000L; // d = 18000000
double e = 12.5; // e = 12.5
double f = 18e-3 // f = 0.018
char g = 'a' ; // g = 'a'
String h = "Hello"; // h = "Hello"参照型とは値そのものを保持するのではなく、値が置いてある場所を保持する型です。
intやdoubleなどの基本データ型はChapter 2で登場する比較演算子が使えるのに対し、参照型は比較演算子が使えません。
主な参照型はString、配列型、List等々です
今は参照型は変数に格納されているのは値ではなく、値のメモリがどこに格納されているかを示す参照値であるということさえ覚えておけば大丈夫かと思います。
以下サンプルです
int arr[] = {1,2,3,4};
//arr[0] = 1 , arr[1] = 2 , arr[2] = 3 , arr[3] = 4
System.out.println(arr[0]); // 1
System.out.println(arr); //[I@2ff4acd0上記のコードでint型の配列arrをprintしようとすると、変な文字と数字の羅列が出てきたと思います。これが参照型の参照値です。
基本データ型と参照型の違い
int x = 100;
int y = x;
System.out.println(x); // 100
System.out.println(y); // 100
y = 200;
System.out.println(x); // 100
System.out.println(y); // 200
int a[] = {1,2,3};
int b[] = a; /*配列aを配列bにコピー*/
System.out.println(a[0]); // 1
System.out.println(b[0]); // 1
b[0] = 9; /*配列bの0番目の要素に9を代入する*/
System.out.println(a[0]); // 9 <-なぜか配列aまで9になる
System.out.println(b[0]); // 9変数aに入っているのは参照型の参照値なので、b = aとおいてしまうと、変数bには変数aの参照値が代入されてしまうことになるので、
b[0]に9を代入すると、a[0]が9になってします。
上記のコードを図示すると
スタック領域
基本データ型の値がある
x = 100
y = x //y = 100 , x = 100
y = 200 //y = 200 , x = 100 スタック領域 ヒープ領域
参照型の参照値がある 参照値の値が保存されている
a ー> { 1 , 2 , 3 }
b = a
//bからもヒープ領域にある値{1,2,3}がアクセスできてしまう