練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

DMonkey: String/StringBuffer オブジェクトの比較

コメントなし»

http://peace.2ch.net/test/read.cgi/win/1412399700/74 より。

別々の String オブジェクトを == 演算子や === 演算子で比較すると、true になってしまいます。

更に、StringBuffer オブジェクトや、StringStringBuffer を継承したクラス同士でもそうなります。

以下の例では、別々のオブジェクトなので正しくは 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 です。