MatsuoTech

技術メモとひとりごと。

気にしたことがなかった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にキャストする実装にするとよい。
    }
}

明日からも他学習内容を書いていく。