一次性搞懂C#中的==,Equals和ReferenceEquals的区别
答案:1 悬赏:0 手机版
解决时间 2021-02-15 20:49
- 提问者网友:無理詩人
- 2021-02-15 00:03
一次性搞懂C#中的==,Equals和ReferenceEquals的区别
最佳答案
- 五星知识达人网友:duile
- 2021-02-15 01:22
百度一下吧,
==运算符:
引用类型:默认 ==运算符 是比较引用的地址即内存地址 FCL String 类型因为有字符串驻留机制: string A="a"; string B="a"; 返回为True.引用类型Equals方法和operator==具有相同的默认行为。
值类型:因为如果你没有为自定义值类型重载operator==的话,就不能写这样的代码“myStruct1 == myStruct2”,否则会得到一个编译错误,原因是值类型没有相等操作符重载的默认实现。
ReferenceEquals:
Object的静态方法。因此不能在继承类中重写该方法。原型是:public static bool ReferenceEquals(object objA, object objB);FCL已经帮我们实现。它就是比较引用指向的内存地址一样。判断值类型的时候需要装箱,肯定返回false.FCL String 类型因为有字符串驻留机制: string A="a"; string B="a"; 返回为True.
Equals: Object类有2个:一个为虚方法,一个为静态方法
public virtual bool Equals(object obj);
==运算符:
引用类型:默认 ==运算符 是比较引用的地址即内存地址 FCL String 类型因为有字符串驻留机制: string A="a"; string B="a"; 返回为True.引用类型Equals方法和operator==具有相同的默认行为。
值类型:因为如果你没有为自定义值类型重载operator==的话,就不能写这样的代码“myStruct1 == myStruct2”,否则会得到一个编译错误,原因是值类型没有相等操作符重载的默认实现。
ReferenceEquals:
Object的静态方法。因此不能在继承类中重写该方法。原型是:public static bool ReferenceEquals(object objA, object objB);FCL已经帮我们实现。它就是比较引用指向的内存地址一样。判断值类型的时候需要装箱,肯定返回false.FCL String 类型因为有字符串驻留机制: string A="a"; string B="a"; 返回为True.
Equals: Object类有2个:一个为虚方法,一个为静态方法
public virtual bool Equals(object obj);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯