回します。https://blog.csdn.net/hujiao199/article/details/4027286
システムを使用しました。
System.Collections.Genericを使用しました。
System.Textのを使用しました。
名前空間ConsoleApplication1
{
クラスPerson
{
プライベート文字列名;
公共の文字列名
{
{戻り名を取得します。}
集合{名前=値。}
}
公共人(文字列名)
{
this.name =名。
}
}
クラスプログラム
{
静的な無効メイン(文字列[] args)
{
文字列A =新しい文字列(新たな文字[] { 'H'、 'E'、 'L'、 'L'、 'O'})。
列B =新しい文字列(新たな文字[] { 'H'、 'E'、 'L'、 'L'、 'O'})。
Console.WriteLineを(== b)は、
Console.WriteLineを(a.Equals(b)参照)。
オブジェクトG =。
オブジェクトh = B。
Console.WriteLineを(グラム==のH)。
Console.WriteLineを(g.Equals(H))。
人物P1 =新しい人( "JIA")。
人物P2 =新しい人( "JIA")。
Console.WriteLineを(P1の==のP2)。
Console.WriteLineを(p1.Equals(P2))。
人物P3 =新しい人( "JIA")。
人P4 = P3;
Console.WriteLineを(P3の==のP4)。
Console.WriteLineを(p3.Equals(P4))。
Console.ReadLine();
}
}
}
なぜ答えが真真真真偽真偽偽であります
値型をスタックメモリに格納されているため(以下スタックと称する)、および保存されたスタックアドレスで参照型の変数は、それ自体がヒープに格納されている型の変数を参照します。
「==」:比較動作は同じである2つの変数、すなわちスタックが示される変数への参照の内容と同じである、スタックに格納されたアドレスと同じである二つの変数の値です。
「等しい」:2つの変数が操作は、同じオブジェクトへの参照であるということである、ヒープの内容が同じであるかどうかを示します。
文字列は、参照型、C#言語、(等号()メソッドを含む)文字列オブジェクトの多くのオーバーロードされたメソッドの特殊なタイプであるので、値型として文字列オブジェクトのようです。
したがって、上記の例では、第1の出力ペア、二つの文字列と文字列の比較は、Bに等しいです。
スタックの内容が同じではないこと、それは等しくないので、2つの異なるオブジェクトのメモリ内の出力対象G = Aと被写体H = B、第二の対、用。等しい(複数すぎる)ようにスティングを用いるg.equals(h)は()メソッドに等しいです。このような修飾のための文字列AとBの場合:
;文字列=「AA」
=「AA」列B、
2つの比較器の次に、gおよびhは等しいです。システムは、文字列B、bにちょうど「AA」のポイントのためにメモリを割り当てていないためです。そう点AとBは、(メモリのこの最適化された割り当ての場合)同じ文字列です。
P1とP2のためだけでなく、2つの異なるオブジェクトのメモリでは、メモリのアドレスは確かに同じではないので、p1は== p2は偽を返し、そしてP1およびP2のでP1ように、別のオブジェクトへの参照です。等号(P2)はfalseを返します。
P3およびP4、P4 = P3、P3オブジェクトへの参照は、P4、P3に割り当てられ、P4は同じオブジェクトへの参照であるため、両者が比較的trueを返します。