あるぇー?
最近になって仕様が変わったのかな? 知らなかったの僕だけ?
package jp.devworks.sample; public class StringCompare { public static void main(String[] args) { String s = "01"; String s2 = "01"; System.out.println(s == s2); } }
false が返ってくるとおもったら true が返ってくる。「こんな実装しちゃだめだよー」って言おうとしてサンプルコード書いたら結果がこうなので驚いてる。
あ、あるぇー?
(追記)
JDK 1.5.09 と 1.6.07 で試した。結果は同じ。 true が返る。
(追記その2)
id:nowokay さんが教えてくれました。
クラスローダーが同じならリテラルは共有されます。
あるぇー? - devworks
やりたかったら
String s = "0";
String s2 = s + 1;
s = s + 1;
System.out.println(s == s2);
とか
なるほど。やってみた
package jp.devworks.sample; public class StringCompare { public static void main(String[] args) { String s = "01"; String s2 = s + 1; s = s + 1; System.out.println(s == s2); } }
false が返ってくる。ちょっと賢くなりました。あざっす!