日期:2014-05-19  浏览次数:20691 次

问个对象比较相等的问题!
下面这段代码:
      string   a= "hello ";
      string   b=string.Copy(a);
      string   c= "hello ";
      Console.WriteLine((object)a==(object)b);
      console.Writeline((object)a==(object)c);
      输出是:
      false
      true
      为什么是这个结果?

------解决方案--------------------
对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。
------解决方案--------------------
因为二个都被强制转换成了Object,所以都算做一般的对像,所以就出现了上面的结果

如果把Object去掉,就都是True了
------解决方案--------------------
“hello”是常量,在编译时,a和c指向了相同的地址,就是说a和c时相同的引用。有程序为证:
object a= "hello ";
object c= "hello ";
Console.WriteLine(a==c);

结果true