Wir alle wissen, dass „int“ Datentyp Speicher wird in Stapel und Objekttyp wird Speichern Sie in Heap wie unten Snap.
Da dies völlig falsch, wissen wir nicht alle wissen, dass.
Denken Sie daran:
int[] M() { return new int[] { 1 }; }
die 1 auf dem Stapel ist? Wenn ja, wie kann dann von M's Anrufer zugegriffen werden, nachdem M zurückkommt?
Offensichtlich kann es nicht sein. Die 1 ist auf dem Heap, obwohl es ein int ist.
Ihr Problem ist, dass Sie an Werte denken, nicht an Variablen. Eine Variable ist Speicher, unabhängig davon, ob eine ganze Zahl oder ein Verweis darin gespeichert ist. Dieser Speicher muss irgendwo sein. Wo diese Speicherung ist hängt von der Lebensdaueranforderung ab. Kurzzeitspeicher kann aus dem Kurzzeitspeicherpool - Stack oder Registern - zugewiesen werden. Langzeitspeicher wird aus dem Langzeitspeicherpool - dem Heap - zugewiesen. Es hat nichts überhaupt damit zu tun, ob der gespeicherte Wert eine Struktur oder eine Referenz ist.
In Ihrem Beispiel kann der Sicherungsspeicher für die Eigenschaften beliebig lange leben und muss daher vom Heapspeicher zugewiesen werden.
Sie müssen einfach aufhören zu glauben, der Mythos, dass Werte von Werttypen auf dem Stapel gehen. Die Werte gehen in Speicher und Speicher geht dahin, wo es gehen muss, um seine lebenslangen Anforderungen zu erfüllen.
Ich weiß nicht, warum unten abstimmen? –