0
0

Java Silver めも

Last updated at Posted at 2024-01-18

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0