Skip to content

Latest commit

 

History

History
124 lines (108 loc) · 4.94 KB

Chapter01.md

File metadata and controls

124 lines (108 loc) · 4.94 KB

1. 変数と型

1.1 基本データ型

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;

1.2 リテラル

リテラルとは基本データ型の値や文字列をコードに記述する際の表現方法のことです 例えば同じ整数でもコード上で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"

1.3. 参照型

参照型とは値そのものを保持するのではなく、値が置いてある場所を保持する型です。

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}がアクセスできてしまう