妈祖庙在哪,哈姆雷特读书笔记,徐翠翠老公刘欢
两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存。
1、使用object.referenceequals()
class program { static void main(string[] args) { person p1 = new person(); p1.name = "mark"; person p2 = new person(); p2.name = "marl"; person p3 = p1; console.writeline(object.referenceequals(p1,p2)); console.writeline(object.referenceequals(p1,p3)); } class person { public string name { get; set; } } }
//结果:false。
true
2.使用object.equals()
class program { static void main(string[] args) { person p1 = new person(); p1.name = "mark"; person p2 = new person(); p2.name = "marl"; person p3 = p1; console.writeline(p1.equals(p2)); console.writeline(p1.equals(p3)); } class person { public string name { get; set; } } }
//结果同上
3、使用== 得到同样的结果。
目前来看,这三个方法都能判断两个对象是否为同一个对象。但是:
static void main(string[] args) { string s1 = new string(new char[] { 'a', 'b' }); string s2 = new string(new char[] { 'a', 'b' }); console.writeline(s1==s2);//true console.writeline(s1.equals(s2));//true console.writeline(object.referenceequals(s1,s2));//false }
这两个s1,s2是两个不同的对象,因为new了两次,在堆中存在两块不同的内存。
总结:
equals:内部是判断两个对象中的值是否一样。
==:内部还是调用的equals方法,所以应该同上。
所以用第一种。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论