サーチ…


C#と等価演算子の等価の種類

C#では、参照平等と値の平等という2つの異なる種類の平等があります。値の平等は、一般的に理解される平等の意味です。つまり、2つのオブジェクトに同じ値が含まれていることを意味します。たとえば、2の値を持つ2つの整数は、値の等しい値を持ちます。参照平等とは、比較するオブジェクトが2つ存在しないことを意味します。代わりに、2つのオブジェクト参照があり、どちらも同じオブジェクトを参照します。

object a = new object();
object b = a;
System.Object.ReferenceEquals(a, b);  //returns true

事前定義された値型の場合、等価演算子(==)は、そのオペランドの値が等しい場合はtrueを返し、そうでない場合はfalseを返します。 string以外の参照型の場合、==は、2つのオペランドが同じオブジェクトを参照する場合にtrueを返します。文字列型の場合、==は文字列の値を比較します。

// Numeric equality: True
Console.WriteLine((2 + 2) == 4);

// Reference equality: different objects, 
// same boxed value: False.
object s = 1;
object t = 1;
Console.WriteLine(s == t);

// Define some strings:
string a = "hello";
string b = String.Copy(a);
string c = "hello";

// Compare string values of a constant and an instance: True
Console.WriteLine(a == b);

// Compare string references; 
// a is a constant but b is an instance: False.
Console.WriteLine((object)a == (object)b);

// Compare string references, both constants 
// have the same value, so string interning
// points to same reference: True.
Console.WriteLine((object)a == (object)c);


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow