Hier ist, wie mein letztes Interview ging:Strings vs Klassen wenn beide Referenztypen
Frage: Wo gespeicherten Strings?
Antwort: Heap, da es eine Referenz-Typ ist
Frage: Erklären Sie mir diesen Code ein:
static void Main(string[] args)
{
string one = "test";
string two = one;
one = one + " string";
Console.WriteLine("One is {0}" , one);
Console.WriteLine("Two is {0}", two);
}
Antwort: Drew zwei Diagramme wie unten:
(steht für die Aussage string two = one;
(steht für die Aussage, one = one + " string";
. Eine neue Zeichenfolge wird auf Heap erstellt und zugewiesen)
Frage: Richtig. Zeichnen ähnlich für den Code-Snippet:
class Program
{
static void Main(string[] args)
{
Test one = new Test { someString = "test" };
Test two = one;
one.someString = "test String";
Console.WriteLine("One is {0}", one.someString);
Console.WriteLine("Two is {0}", two.someString);
}
}
class Test
{
public string someString { get; set; }
}
Antwort:
[Test two = one
]
one.someString = "test String";
Frage: Ok. Sie haben gesagt, strings
und classes
sind Referenztypen. Warum wurde dann ein neues Objekt für den String erstellt und der Wert zugewiesen, während für die Klasse die vorhandene String-Eigenschaft selbst geändert wird?
Antwort: Weil Zeichenfolgen unveränderlich sind, während Klassen veränderbar sind.
(Obwohl ich das Interview geklärt habe, habe ich dieses Verhalten immer noch nicht verstanden. Warum haben die Designer der Klasse es veränderlich gemacht, während sie die Strings unveränderlich halten? Es gibt viele der rotistischen Antworten überall, aber irgendjemand könnte es einfach machen Erklären dieses besondere Verhalten mit dem obigen Code?)
[Warum .NET String unveränderlich ist?] (Http://stackoverflow.com/questions/2365272/why-net-string-isimmutable) Interessantes lesen, nicht versuchen, irgendwelche Ihrer Punkte über Klassenunveränderlichkeit anzusprechen. –
http://stackoverflow.com/questions/4274193/what-is-the-difference-between-a-mutable-and-immututable-string-in-c – Nahum
http://stackoverflow.com/questions/93091/why -cant-strings-muable-in-java-and-net – Nahum