首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

对象比较“==”是比较地址还是值,该如何处理

2012-01-09 
对象比较“”是比较地址还是值对比的是对象地址还是它们的值?例如classA{stringname...}数组A[]anewA[6]

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

例如   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,不要重载==。

热点排行