var の使い方
ローカル変数 の宣言でしか使えない
フィールドの宣言や、引数宣言で使うとコンパイルエラーになる
==とequals
==は同一性
同一性は同じ参照かどうかを判定
Sample s1 = new Sample(10);
Sample s2 = s1;
System.out.println(s1==s2);
//true
Sample s1 = new Sample(10);
Sample s2 = s1;
s1 = new Sample(10)
System.out.println(s1==s2);
//false
Sample s1 = new Sample(20);
Sample s2 = new Sample(20);
System.out.println(s1==s2);
//false
equalsは同値性
Sample s1 = new Sample(20);
Sample s2 = new Sample(20);
System.out.println(s1.equals(s2));
//true
equalsメソッドはObjectクラスのメソッド
Objectクラスに定義されているequalsメソッドは同一性を判定する実装になっているため、オーバーライドして実装することで、同値性を判定できる。
オーバーロードするとObjectクラスの同一性を判定するメソッドが実行される
コンスタントプール
同じ文字リテラルが登場すると、異なる参照でも同一性判定ではtrueが返される
String a = "test";
String b = "test";
System.out.println(a==b);
//異なる参照だが、文字リテラルは同じなのでtrue
switch
switch文にnullが入るとNPEが投げられる
String str = null;
switch(str){
case a : System.out.println("a");
case b : System.out.println("b");
//NPE発生
while/do while
do while 文
do{
//somecord
}while(条件);
doの後ろにかっこはつけない
whileの後ろに条件式を記述する
セミコロンで終了する
中かっこの省略
1つの文だけが繰り返し処理される
int cnt = 0;
while(cnt++<5)
System.out.println("繰り返しの対象となる文");
System.out.println("繰り返しの対象にならない文");
///2つの文を1行にまとめても繰り返されるのは1文だけ
int cnt2=0;
while(cnt2++<5)
System.out.println("繰り返し");System.out.println("繰り返さない");
do-while文で中かっこ省略はdoの後ろには1つしか記述できない
int cnt = 0;
do
System.out.println("書けるのは1つだけ");
System.out.println("2つ以上書くとコンパイルエラー");
while(cnt++<5);
///中かっこをつければ複数記述可能
int cnt = 0;
do {
System.out.println("中かっこをつければ");
System.out.println("2つ以上書ける");
} while(cnt++<5);
for文
初期化文で複数の変数宣言を記述可能
複数の変数を宣言する場合、型は同じでなければならない
for(int i = 0; j = 0; i<3; i++){
//繰り返し
}
for文内で宣言した変数はfor文の外では使えない
int a = 1;
for (int b = 2,total = 0; b <= 5; b++) {
total = a*b;
}
System.out.println(total+"for文のブロック外で変数を使っているからコンパイルエラー");
for文で複数記述できるのは初期化文と更新文の2つ
条件文はカンマ区切りで複数記述できない。条件文を複数記述する場合は論理演算子を使う。
ラベル
int total = 0;
a : for (int i = 0; i < 5; i++) {
b: for(int j = 0; j < 5;j++) {
if (i%2 == 0)continue a;
if(3< j) break b;
total += j;
}
}
System.out.println(total);
i = 0の時 continue実行
i = 1 ラベルb以降
i = 1 : j = 0
i = 1 : j = 1
i = 1 : j = 2
i = 1 : j = 3
ここまでがtotalに入る
i = 1 : j = 4 break ラベルaに移行
i = 2 continue 実行 ラベル a
i = 3 : j = 0
i = 3 : j = 1
i = 3 : j = 2
i = 3 : j = 3
i = 3 : j = 4 break ラベルb
i = 4 continue 実行 ラベルa
終わり
total 12