新規記事の投稿を行うことで、非表示にすることが可能です。
2018年05月04日
【010】文字列型(1)
文字列型(1)
【文字列型の型名】
文字列型の型名は、
.NET では String です。
C# においては、String とともに、String の別名である string を使用できます。
【文字列型の比較】
文字列型は参照型ですから、オブジェクトを比較演算子で比較する際には、「値」だけでなく、「参照先」についても考慮が必要です。
参照型オブジェクトの比較を、
「 == 」演算子
で行う場合、値が同じであっても参照先が異なれば False になります。
ただし、String型の比較に限っては、「 == 」演算子は「値」だけを比較して結果を返します(★)。
Stringクラス内で、「 == 」演算子がそのように定義されているからです。
下記のプログラムでは、
str1 と str2 は同一のオブジェクトを参照しています。
str1 と str3 は異なるオブジェクトを参照していますが、値は同じです。
したがって、「 == 」演算子での比較結果は @,A共 True となります。
B,C は、値を比較する Equalsメソッドによる比較ですから、ともに True です。
参照先を比較する ReferenceEqualsメソッドによる結果は、
当然、D が True、E が False となります。
F,G では、string型を Object型にキャストした上で、「 == 」演算子による比較を行っています。
Object型に対しては、上述の★のような定義はありません。
よって、F が True、Gが False となります。
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
String str1 = "aaa";
String str2 = "aaa";
String str3 = new string('a', 3);
Console.WriteLine(str1 == str2); // @ True
Console.WriteLine(str1 == str3); // A True
Console.WriteLine(str1.Equals(str2));
// B True
Console.WriteLine(str1.Equals(str2));
// C True
Console.WriteLine(ReferenceEquals(str1, str2));
// D True
Console.WriteLine(ReferenceEquals(str1, str3));
// E False
Console.WriteLine((Object)str1 == (Object)str2);
// F True
Console.WriteLine((Object)str1 == (Object)str3);
// G False
}
}
}