值的比较

来源:互联网 发布:淘宝店铺促销活动方案 编辑:程序博客网 时间:2024/05/29 03:18

今天看《你必须知道的.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