IDEの功罪の罪の方。Java 11 SE Silverを勉強してて気づいたことの話。
鍵カッコナシif文
if (true) {
// do something
} else {
// do something
}
は、
if (true)
// do something
else
// do something
と書ける。そのなかでelse-ifはどう書かれるか
if (true)
// do something
else if(false)
// do something
と書く。ではネストしたif文は
if (true)
// do something
else
if (false)
// do something
else
// do something
と書く。これを鍵カッコ付きで書くと
if (true) {
// do something
} else {
if (false) {
// do something
} else {
// do something
}
}
となる。改行がネストを表す。
こんなコードは書いてはいけないと思っているけど、書けるみたいです。
Switch文の条件式で使える型
使えるもの
- char(Character)
- short(Short)
- String
- byte(Byte)
- int(Integer)
- Enum
使えないもの
- double、float等の浮動小数点値
- 他オブジェクト
他注意点
比較する値に変数は使えない。final宣言された定数のみ。
Switch文のdefault
defaultより前の式においてbreakされていないと実行されてしまう。
String.intern()
internメソッドはコンスタントプール(実際の値を持つメモリ上の領域)の値を返すため、以下の比較でもtrueになる。
String a = "abc";
String b = new String("abc");
if (a.intern() == b.intern()) {
// nanka suru
}
equalsメソッド盲点
以下のような実装で、equalsメソッドでObject型を受け取ると、Objectのequals(参照同一性比較)が走る
public class Sample() {
private int val;
public Sample(int val) {
this.val = val;
}
public boolean equals(Sample obj) {
// オブジェクト型で受け取り、Sampleにキャストする実装にするとよい。
}
}
明日からも他学習内容を書いていく。