http://peace.2ch.net/test/read.cgi/win/1412399700/74 より。
別々の String
オブジェクトを ==
演算子や ===
演算子で比較すると、true
になってしまいます。
更に、StringBuffer
オブジェクトや、String
、StringBuffer
を継承したクラス同士でもそうなります。
以下の例では、別々のオブジェクトなので正しくは false
となるところ、全て true
と表示されてしまいます。
class S extends String { }
class SB extends StringBuffer { }
var a = new String ('aaa');
var b = new String ('bbb');
var c = new S ('ccc');
var d = new S ('ddd');
alert (a === b); // Stringの別々のインスタンス
alert (c === d); // String派生クラスの別々のインスタンス
alert (a === c); // StringとString派生クラス
var e = new StringBuffer ('eeee');
var f = new StringBuffer ('fff');
var g = new SB ('ggg');
var h = new SB ('hhh');
alert (e === f); // StringBuffer
alert (g === h); // StringBuffer派生クラス
alert (e === g); // StringBufferとStringBuffer派生クラス
alert (a === e); // StringとStringBuffer
alert (a === g); // StringとStringBuffer派生クラス
alert (c === e); // String派生クラスとStringBuffer
alert (c === g); // String派生クラスとStringBuffer派生クラス
2015-03-22 追記
new
してない String
そのもの、StringBuffer
そのものでも true
になります。
派生クラスの場合(上の例の S や SB)は false
です。