关于之前: C# == 和 Equals 的讨论,再加几句,顺便散点分

bloodish 2017-11-13 04:26:25
很久没来逛了,前几天讨论的 C# == 和 Equals, 很有意义, 说几点自己的理解:
1. ==, 只判断引用是否相同,同则认为相同,反之不同;
2. Equals是在Object类型中定义的虚方法;
3. Object是所有类型的基类,包括值类型;
4. 值类型被装箱可以看成是Object类型的UP CAST (子类被赋给父类的对象), 装箱不会改变被装箱类型的多态性;
5. 基元类型都对Equals方法进行了重写.

综上,结论很清楚了.
...全文
614 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我没看懂结论是啥,但微软一直都是建议 ==和Equals要成对出现,即重写了任意一个,都要将另外一个也重写,以保证一致性
星空蔚蓝 2017-11-15
  • 打赏
  • 举报
回复
学习了~感谢楼主的心得体会~
yjq92 2017-11-15
  • 打赏
  • 举报
回复
嘻嘻,接分日后好提问,谢谢
stevenjin 2017-11-15
  • 打赏
  • 举报
回复
要区分是值比较,还是比较引用。 不同场合,得出的结果不一样。
风吹腚腚凉 2017-11-14
  • 打赏
  • 举报
回复
引用 16 楼 caozhy 的回复:
==, 只判断引用是否相同,同则认为相同,反之不同; 第一个就错了,对于值类型,就是比较值
string 类型比较的也是值,因为C#会重载运算符,实际上就是比较值是否相同,而不是引用地址是否相同。 在C#中还有一个叫驻留池的概念,在某些情况下比较地址也会相同,因为同样的字符串内存地址是一样的,当然是在某些情况下。 至于其他的我觉得没必要再讲了,累了。
无情时尚 2017-11-14
  • 打赏
  • 举报
回复
双手接分!!!
zzzsss_gsd 2017-11-14
  • 打赏
  • 举报
回复
楼主给力,顶一个
assky124 2017-11-14
  • 打赏
  • 举报
回复
接分会被删除么
bloodish 2017-11-14
  • 打赏
  • 举报
回复
引用 16 楼 caozhy 的回复:
==, 只判断引用是否相同,同则认为相同,反之不同; 第一个就错了,对于值类型,就是比较值
挑错能力不错,没写上就是错的,认了
bloodish 2017-11-14
  • 打赏
  • 举报
回复
引用 14 楼 closurer 的回复:
C# 允许重载操作符,== 的行为是可以改变的,也可以不判断引用。 类型的行为和装箱、拆箱没有关系,装箱、拆箱只会影响性能,不会影响结果。
同意,第一点是这对之前的讨论就是论事.
wkb2533 2017-11-14
  • 打赏
  • 举报
回复
Dogfish 2017-11-14
  • 打赏
  • 举报
回复
我也是进来接分的
threenewbee 2017-11-13
  • 打赏
  • 举报
回复
==, 只判断引用是否相同,同则认为相同,反之不同; 第一个就错了,对于值类型,就是比较值
njit_77 2017-11-13
  • 打赏
  • 举报
回复
闭包客 2017-11-13
  • 打赏
  • 举报
回复
C# 允许重载操作符,== 的行为是可以改变的,也可以不判断引用。 类型的行为和装箱、拆箱没有关系,装箱、拆箱只会影响性能,不会影响结果。
  • 打赏
  • 举报
回复
楼主给力啊
  • 打赏
  • 举报
回复
楼主好人
大鱼> 2017-11-13
  • 打赏
  • 举报
回复
感觉如果深入学习.NET的话,还是需要一定精力的
把分全给哥 2017-11-13
  • 打赏
  • 举报
回复
楼主好人
练白龙 2017-11-13
  • 打赏
  • 举报
回复
顶楼主,顺便来接分
加载更多回复(6)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧