2012-02-23 71 views
1

我比較2個字符串和2個類對象,然後爲什麼字符串一個比較給出結果「真」,而對象比較給出「假」?請解釋兩種情況下存儲位置的變化情況?字符串和類都是引用類型,那麼爲什麼比較返回不同的結果?

class Program 
{ 
    public class Person 
    { 
     public string Name { get; set; } 
    } 

    static void Main(string[] args) 
    { 
     string s1 = "xyz"; 
     string s2 = "xyz"; 

     bool b = s1 == s2; 

     Person p1 = new Person(); 
     Person p2 = new Person(); 

     bool x = p1 == p2; 

    } 
} 

回答

0

明確的解釋。

0

總之,等號運算符的功能是不同的。基本上,對於一個字符串,==運算符會查看每個字符,如果它匹配,並且對於一般的引用類型,==運算符將會看到它們是否具有相同的「指針」。

0

你需要重載==!=運營商爲您Person類,如果你想要的東西比引用類型的默認行爲(這是返回True當且僅當實例是相同的(except for the string class))其他:

public class Person 
{ 

    public static bool operator ==(Person p1, Person p2) 
    { 
     // Insert logic here 
    } 

    public static bool operator !=(Person p1, Person p2) 
    { 
     // Insert logic here 
    } 
} 

在您的例子,當你實例化兩個不同的Person對象,p1 == p2將返回false。

相關問題