+ -
当前位置:首页 → 问答吧 → 【非C#高手不能解决!!!】

【非C#高手不能解决!!!】

时间:2011-12-23

来源:互联网


求解释

C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine((2 + 2) == 4); //True

            object s = 1;
            object t = 1;
            Console.WriteLine(s == t);//False

            string a = "hello";
            string b = String.Copy(a);
            string c = "hello";

            Console.WriteLine(a == b);//True
            Console.WriteLine((object)a == (object)b);//False
            Console.WriteLine((object)a == (object)c);//True

            Console.Read();

        }
    }
}

作者: mycno001   发布时间: 2011-12-23

要解释什么?

string类重载了==运算符,所以a == b调用了string.operator==运算符,这个运算符比较的是字符串内容,所以相等返回true,

如果转化为object类型,就不调用string.operator==运算符了,而是采用默认的引用类型比较方式,引用相等则true,引用不等但内容相等,仍然返回false,

String.Copy(a);创建了另一个string新实例,这个实例内容和a相同但对象引用不同,所以b的引用和a不同,((object)a == (object)b)比较引用的结果必然是false,

a和c都是初始化为常数字符串,c#会优化字符串,对于相同的字符串常数,c#只会创建一个实例,以节省空间,这样a和c都指向同一个字符船实例,引用相等,((object)a == (object)c)自然返回true,

作者: stonespace   发布时间: 2011-12-23

全被2L说了

作者: zh6335901   发布时间: 2011-12-23