ご質問で使用している比較演算子【==】は値の比較となります。
String型は参照型となるので、下記のように擬似プリミティブとしてであれば結果がTrueとなります
`
String str = "テスト文字";
if (str == "テスト文字"){
system.out.println("Trueになる");
} else {
system.out.println("Falseになる");
}
`
結果がなぜ違うのかといいますと、下記例は参照型として初期化しているので
変数strには"テスト文字"という値を参照するためのアドレスが格納されています。
アドレス=="テスト文字"では結果がFalseです。
例)
■参照型で初期化
String str = new String("テスト文字");
下記例の場合、擬似プリミティブ型として変数strには"テスト文字"という値が直接
格納されているので結果がTrueとなります
例)
■擬似プリミティブ型で初期化
String str = "テスト文字";
本来参照型であればこのようなことはできないのですが、Stringは使用頻度が高いため、
javaのコンパイラが自動で補完してくれます。
このような行為をシンタックスシュガーと呼びます。
(この例に限りませんが)
参照型で初期化した場合、メモリ上にインスタンス生成時と初期化に使用した無名のStringインスタンス
の2つが存在するようになるため、擬似プリミティブとして初期化する事のほうが圧倒的に多いかと思います。
おまけですが、String型の比較ではequalsメソッドを用いるようにしましょう。
String str = "テスト文字"; if("テスト文字列".equals(str)){ system.out.println("Trueになる"); }
「str.equals("テスト文字列")」でも結果は同じですが、変数strがnullの場合、例外が発生するので
「"テスト文字列".equals(str)」こちらをお勧めします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。