主题:[讨论]请教高手一个问题
lennon1958
[专家分:160] 发布于 2007-07-13 11:47:00
string s = "test";
string t = string.Copy(s);
Console.WriteLine(s == t);
Console.WriteLine((object)s==t );
Console.WriteLine(s ==(object) t);
Console.WriteLine((object)s ==(object) t);
这四个输出的结果是 true false false false
请高手帮忙解释一下,为什么结果是这样的
回复列表 (共5个回复)
沙发
lennon1958 [专家分:160] 发布于 2007-07-16 15:04:00
希望各位高手指点一二
板凳
lushenbo [专家分:120] 发布于 2007-07-16 15:34:00
我觉得第一个返回true是因为对于string,==判断的是内部的值
但是对于对象,==判断的是两个对象是否指向同一片内存区域
所以后边三个判断返回false
不知道解释是不是正确
3 楼
daishan [专家分:0] 发布于 2007-07-16 19:21:00
第一句==运算符两边的类型都是string类型,所以==运算符比较字符串的值,故相等;
后面三句==运算符两边的类型都是string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true;否则返回false。现在他们引用的不是同一个对象所以false.
4 楼
louja [专家分:280] 发布于 2007-07-19 13:07:00
string s = "test";
string t = string.Copy(s);
Console.WriteLine(s == t);值比较
Console.WriteLine((object)s==t );对象比较(内存地址比较),只有是同一引用才为真
Console.WriteLine(s ==(object) t);同上
Console.WriteLine((object)s ==(object) t);同上
5 楼
lennon1958 [专家分:160] 发布于 2007-07-20 11:01:00
这一点和java不同,java里如果进行s == t的比较,应该是比两个引用,是false
不知道我这样理解对不对
我来回复