Booの比較演算子には、==,is,isaの3つがあります。
- ==は値が等しいか
- isは同じオブジェクトを参照しているか
- isaはクラスが同じかどうか
といってもややこしい!ので、サンプルを。これはUnityで動作します。
import UnityEngine class test (MonoBehaviour): def Start (): a=0 b=0 Debug.Log( a == b ) # True Debug.Log( a == 0 ) # True #Debug.Log( a is b ) # "is" can"t be used with a value type ("int") #Debug.Log( a is 0 ) # "is" can"t be used with a value type ("int") c="abc" d=c Debug.Log( c == d) # True Debug.Log( c == "abc") # True Debug.Log( c == "a"+"b"+"c") # True Debug.Log( c is d) # True Debug.Log( c is "abc") # True Debug.Log( c is "a"+"b"+"c") # False
実はこれ最後以外全部Trueを返します。
18行目で、cと"abc"を比較するときに、"abc"は新しく宣言されるstringなので、別の参照先となるのでFalseが返ってくる!という初心者泣かせな現象は今の時代ではありえなくて、実は新しく宣言された"abc"は前の"abc"インスタンスが再利用されるのです。コンパイラは優秀なのです。しかし、優秀なコンパイラも19行目で"a"+"b"+"c"とすると、別の"abc"を生成するので、参照先は最初の"abc"とは別になります。最終的に、最後だけがFalseとなります。
文字列を代表する参照型の比較をする場合は==を利用しましょう。
数値はisが使用できないので、==を使います。
まとめると、普通の用途なら、Booでは==で比較をしよう!となります。