文字列を == で比較してもいい例

昨日、トリムされているかの判定処理を書いていて気付いたのですが…。


Javaでは、文字列比較に == を使ってはいけないのが常識。
でも、以下の場合は == を使ってもOKです。

/**
 * トリムされている(両端が空白でない)かどうか判定します。
 *
 * @param  str 判定する文字列
 * @return strがトリムされていたら true、トリムされていなければ false
 */
private boolean isTrimed(String str){
	return (str == str.trim());
}

なんで?

JavaAPIによると、trimメソッドの仕様は以下のようになっています。

public String trim()

    文字列のコピーを返します。先頭と最後の空白は省略されます。
    (中略)
    このメソッドは文字列の先頭と最後から (上記で定義された) 空白を切り取るために使用できます。


    戻り値:
        この文字列の先頭と最後の空白を削除したコピー、またはこの文字列 (先頭と最後に空白が存在しない場合)

Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle


つまり、トリム済みであれば引数に渡したオブジェクトがそのまま返ってきます。
そのため、この場合は文字列だけど == で比較してOKということになります。




・・・でも、あとで見たときに「嘘だバグだ!」って叫ぶことになるので、普通にequalsで書くことをお勧めします(笑)