值的比较

今天看《你必须知道的.net》时候,

看到值类型、引用类型的比较时发现和自己以前的理解有误差。

值类型的比较:int a=1;int b=1;a==b比较两个a,b值是否相等 (true);equals(a,b)比较两个值是否相等(true);ReferenceEquals(a,b)比较a,b是否为同一对象(false),此时a,b分别进行的装箱,占用不同的内存,两个不同的对象;


引用类型的比较(非string); a==b比较的是两个对象是否为同一对象(false);equals(a,b)比较两个对象是否为同一对象;ReferenceEquals(a,b)比较两个对象是否为同一对象


string类型比较:a==b比较的是两个值是否相同;equals(a,b)比较的是a,b的值是否相同;ReferenceEquals(a,b)比较两个对象是否相同

值得注意的是string类型的时候

string a="111";

string b="111";

此时ReferenceEquals(a,b);比较,最初我以为是应该为false;

但结果不是;因为,string类型由于字符串驻留机制,在string声明的时候会先在string的驻留池中先检查是否有此string值的对象,有则直接引用,无则创建,因此此处的a,b是对应的同一对象,结果为false;

若为string a=new string ("1",1);string b=new  string("1",1);则为显示的声明了两个字符串,并分别分配了内存;此时ReferenceEquals(a,b)比较则为false,a,b为不同的引用;



如发现有错,请帮忙指出,谢谢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值