今天看《你必须知道的.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为不同的引用;
如发现有错,请帮忙指出,谢谢。