2017-01-21 6 views
-3

文字列がSystem.Stringの別名ですが、この特定の動作を理解できません。stringに値を代入すると、新しいインスタンスが作成されますか? C#

string s = "ABC"; 
string s1 = "AB"+"C"; 
String s2 = new String("ABC"); 

s == s1戻りtrueしかしs == s2戻りfalse

私が知っているのはss1というインスタンスは参照型ですが、s==s1は本当ですか?

+1

[string.Equals()と==演算子は本当に同じですか?](http://stackoverflow.com/questions/3678792/are-string-equals-and-operator-really-same) –

+1

http – Khoshtarkib

+1

"AB" + "C"は、コンパイラによって "ABC"に変換されます。また、文字列がインターンされるので、sとs1は同じ文字列への参照です。文字列型は特殊で、他の参照型とは扱いが異なります。 –

答えて

3

why is s==s1 true ?

operator==()がそうでなければ起こるありふれた間違いを避けるために、文字列のために上書きされる前にこの質問が回答されています。

String s2 = new String("ABC");の後に、「s == s2がfalseを返す」という疑問があります。

表示されている行はコンパイルされません。コンパイルするものはString s2 = new String(new char[] { 'A', 'B', 'C'});で、その後はs==s2がtrueです。

は、単純にC#キーワードであり、System.Stringの別名です。 2つはプログラムの意味を変えずに互換的に使用できます。

関連する問題