回 帖 发 新 帖 刷新版面

主题:[讨论]请教高手一个问题

     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个回复)

沙发

希望各位高手指点一二

板凳

我觉得第一个返回true是因为对于string,==判断的是内部的值
但是对于对象,==判断的是两个对象是否指向同一片内存区域
所以后边三个判断返回false
不知道解释是不是正确

3 楼

第一句==运算符两边的类型都是string类型,所以==运算符比较字符串的值,故相等;
后面三句==运算符两边的类型都是string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true;否则返回false。现在他们引用的不是同一个对象所以false.

4 楼

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 楼

这一点和java不同,java里如果进行s == t的比较,应该是比两个引用,是false
不知道我这样理解对不对

我来回复

您尚未登录,请登录后再回复。点此登录或注册