同値と同一とオブジェクトプール

http://d.hatena.ne.jp/crimsonwoods/20061129/1164783396

string.Emptyと文字列リテラル""について参照比較をした場合の挙動が、

.NET Framework 1.1と2.0で異なることについて。

MSDNを引っ掻き回してみると、

string.Internに.NET Framework 1.1と2.0では

インターンの仕様が変わったよと書いてある。

.NETでもこの手の罠はあるのね・・・。
Pythonでもおもしろい例が。

>>> a = 256
>>> a == 256
True
>>> a is 256
True
>>> a = 257
>>> a == 257
True
>>> a is 257
False
>>>

ただし、Pythonでは同値が==で、同一がisになっている。==が同一となっているJavaやC#よりは罠にかかりにくいと思う。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。