1

ここにC#コードがあります。

class Program
    {
        static void Main(string[] args)
        {
            char [] arry = {'a', 'b', 'c'};

            String str1 = 'a' + "bc";
            String str2 = "bcd";
            String str3 = new String(arry);

            if (str1 == str2)
                Console.WriteLine("str1 == str2");
            if (str1 == str3)
                Console.WriteLine("str1 == str3");
            if (String.Equals(str1, str3))
                Console.WriteLine("String.Equals(str1, str3)");

            String str4 = GetStr();
            if (str1 == str4)
                Console.WriteLine("str1 == str4");
            if (String.Equals(str1, str4))
                Console.WriteLine("String.Equals(str1, str4)");

            if (str3 == str4)
                Console.WriteLine("str3 == str4");
            if (String.Equals(str3, str4))
                Console.WriteLine("String.Equals(str3, str4)");
        }

        public static String GetStr()
        {
            String str = "ab" + 'c';
            return str;
        }
    }

そして結果は..

 str1 == str3
 String.Equals(str1, str3)
 str1 == str4
 String.Equals(str1, str4)
 str3 == str4
 String.Equals(str3, str4)

すべての結果が「等しい」と表示される理由 ?? やはり基準値がバラバラです。だから、結果は「違う!」だったはずです。だがしかし。なんで?String.equal() を使用する理由はないようです!!

4

6 に答える 6

0

各文字列リテラルが必ずしも新しい文字列インスタンスになるとは限りません。文字列等値演算子に従って等しい文字列リテラルが 2 つ以上同じアセンブリにある場合、これらの文字列リテラルは同じ文字列インスタンスを参照します。たとえば、によって生成される出力

class Test
{
   static void Main() {
      object a = "hello";
      object b = "hello";
      System.Console.WriteLine(a == b);
   }
}

2 つのリテラルが同じ文字列インスタンスを参照しているため、True です。

これを完全に見ることができます:

http://msdn.microsoft.com/en-us/library/aa691090%28v=vs.71%29.aspx

于 2013-05-30T12:24:29.687 に答える