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

对象比较“==”是比较地址还是值
对比的是对象地址还是它们的值?

例如   class   A{   string   name;   ...}

数组   A[]   a   =   new   A[6];


if(a[1]   ==   a[2])
{   ...   }

if(a[1].name   ==   a[2].name)
{   ...   }

这两种对比哪种快?

------解决方案--------------------
== 在对于不同对象比较时方式不一样
对于引用对象 比较的是引用
对于值对象 比较的是值

但是这是一般原则,有特殊,比如字符串类型
本身是引用类型,但是 == 比较的是值
速度上没法做比较 比较的东西都不一样
------解决方案--------------------
也就是说,对于一般的引用对象
比较的就是“是否是同一个东西”
再确切点说,就是“是否是指向内存里的同一个对象”
对于值对象
就要理解为“是否是一样的值”,而这两个值可能属于两个完全不同类型的对象
------解决方案--------------------
class 如果实现IComparable
== 是值比较
否则引用比较

------解决方案--------------------
这个要看类是怎么定义==这个运算符的,
如果是类,则一般为引用是否相等,
但是String类则不是这个规则,它是比较两个字符串内容是否相等.

如果是值类型,则直接比较等是否一样.
------解决方案--------------------
要看各个object是怎么重载==运算符的
------解决方案--------------------
除了string,不要重载==。