文字列比較でstr.equals()を使う理由の説明テンプレート

「==」でマッチするのは参照先が同じ参照(ポインタ)の場合のみ。

まれに「==」で比較ができてしまう場合があるのは、文字列リテラルで同じ値の場合には同じ実体をみる参照となるためであり、リテラルでない場合は文字列として同じ値であっても実体は別物です。

package net.seratch;

import java.util.StringTokenizer;

public class ComparingString {

	public static void main(String[] args) {
		
		// リテラル
		String literal1 = "hoge";
		// リテラル
		String literal2 = "hoge";
		// Stringクラスのインスタンスとして生成
		String instantiated = new String("hoge");		
		// StringTokenizerの戻り値を代入
		String tokenized 
			= new StringTokenizer("hoge:foo:var", ":").nextToken();
		
		// リテラル同士の比較は==でもstr.equals()でも真
		if ( literal1 == literal2 ) 
			System.out.println("l1,l2 == matched");
		if ( literal1 != null && literal1.equals(literal2)) 
			System.out.println("l1,l2 equals matched");
		
		// リテラルでないものとの比較はstr.equals()のみ真
		if ( literal1 == instantiated ) 
			System.out.println("l1, instantiated == matched");
		if ( literal1 != null && literal1.equals(instantiated)) 
			System.out.println("l1, instantiated equals matched");
		if ( literal1 == tokenized ) 
			System.out.println("l1, tokenized == matched");
		if ( literal1 != null && literal1.equals(tokenized)) 
			System.out.println("l1, tokenized equals matched");
	}
}