気にしたことがなかったJava #1
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にキャストする実装にするとよい。 } }
明日からも他学習内容を書いていく。