.net (C#) 中的比较[==] 操作符的深入理解

 

///C#中的比较[==]操作

///Author:Deney

///ps:基础演示

object o1 ;  //目标对象

object o2 ;  //目标对象

o1 = 1;  //目标对象赋值为

o2 = 1;  //目标对象赋值为

///下面应该输出False

///因为非内置对象(class 对象)的默认== (指在未重载情况下的)为引用比较

///我觉得可以理解成指针地址比较;)

Console.WriteLine(o1 == o2);

///下面输出应为True

///因为当你用o1.GetType() 来检测类型的时候,你会发现它实际的类型还是Int32。

///这样一来,当你调用Equals 的时候调用的则为实际类型Int32 类型的Equals方法了,

///此时为值比较,自然为真           

Console.WriteLine(o1.Equals(o2));

o1 = o2; //在这里,我直接将两个对象作= 运算;

///下面应该输出真,原因如上,因为此时o1,o2所指向的堆数据为同一地址,故相等;

///重点,内存中。o1,o2的地址不同,但地址指向的值(引用)相同

Console.WriteLine(o1 == o2);

///值不变,值比较依然不会变化,True;

Console.WriteLine(o1.Equals(o2));

o2 = 1;

Console.WriteLine(o1 == o2);

Console.WriteLine(o1.Equals(o2));

Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!");

o1 = "1";

o2 = "1";

///这里很特殊,因为String为class对象,故string是堆存放的,

///输出为真因为== 实际上已经被string对象重载,故相等;

Console.WriteLine(o1 == o2);

Console.WriteLine(o1.Equals(o2)); 

o1 = o2;

Console.WriteLine(o1 == o2);

Console.WriteLine(o1.Equals(o2));

o2 = "1";

Console.WriteLine(o1 == o2);

Console.WriteLine(o1.Equals(o2));

Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!");

o1 = new object();

o2 = new object();

Console.WriteLine(o1 == o2);

Console.WriteLine(o1.Equals(o2));

o1 = o2;

Console.WriteLine(o1 == o2);

Console.WriteLine(o1.Equals(o2));

o2 = new object();

Console.WriteLine(o1 == o2);

Console.WriteLine(o1.Equals(o2));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值