2017-11-08 1 views
-1

Wenn ich erstellen neues Objekt für String-Builder und diese Variable verwenden, dann, wie Zuweisung Arbeitsspeicher und was Ergebnis meiner Code-Schnipsel mein BeispielcodeWie funktioniert die Zuweisung von Variablenspeicher?

1)

String nextPoint=new StringBuilder().append("My").append("next").append("point").toString(); 

System.out.println(nextPoint); 

2) ist

StringBuilder downPoint=new StringBuilder().append("My").append("next").append("point"); 

System.out.println(downPoint.toString()); 
ist

Welche Variablen/Instanz kann Speicher belegen? Welche Lösung ist besser, wenn ich die Variablen "nextPoint" oder "downPoint" verwende?

Antwort

1

Welche Variablen/Instanz kann Speicher belegen?

Jede Klasse belegt Speicherplatz. Wie viel hängt von der Klasse ab. Jedes Objekt belegt Heap-Speicher. Wie viel hängt von seiner Klasse ab. Viele Klassen und Objekte enthalten auch Verweise auf andere Objekte, und diese anderen Objekte belegen ihren eigenen Heap-Speicher. Einige Objekte haben auch native Ressourcen, die eine idiosynkratische Speichermenge belegen. Lokale Variablen belegen den für ihren Typ geeigneten Stapelspeicher, obwohl sich unter bestimmten Umständen bestimmte lokale Variablen den gleichen Stapelspeicher teilen können wie andere.

In Ihrem Fall (1):

String nextPoint=new StringBuilder().append("My").append("next").append("point").toString(); 

System.out.println(nextPoint); 

Variable nextPoint ist eine lokale Referenzvariable, Stapelspeicher raubend (für eine Referenz, nicht ein ganzes String). Es wird initialisiert, indem ein neues StringBuilder-Objekt (auf dem Heap) erstellt wird und drei Strings angefügt werden (jeweils ein Objekt, das den Heapspeicher belegt), und dann ein neues String-Objekt erstellt wird (auch Heap-Speicher belegend) und ein Verweis darauf gespeichert wird in nextPoint. Die StringBuilder wird eine Art von zugeordnetem Speicher für die akkumulierten Charakterdaten haben; Dies wird nicht mit dem der beteiligten Strings überlappen.

Ihr Fall (2) unterscheidet sich nur dadurch, dass anstelle eines Verweises auf den erzeugten String ein Verweis auf den StringBuilder beibehalten wird. Das kann Auswirkungen auf den folgenden Code haben, aber es macht keinen Unterschied, welche Objekte erstellt werden und welcher Speicher benötigt wird.

Welche Lösung ist besser, wenn ich "nextPoint" Variable oder "downPoint" Variable verwende?

Es hängt davon ab, was Sie danach tun möchten. Wenn Sie keine dieser Variablen erneut verwenden, ist der Unterschied rein stilistisch.

was ist Ergebnis meiner Code-Snippet [?]

Legen Sie es in einer Klasse, führen Sie es, und für sich selbst herausfinden. Oder finde es aus dem Code heraus. Dies ist nicht etwas, was Sie brauchen, um uns für Sie zu beantworten.

0

Beiden Schnipsel tun, um die gleiche Sequenz von Methodenaufrufen,

new StringBuilder().append("My").append("next").append("point").toString(), wobei

so ihre Speichernutzung (meistens) das gleiche ist.Nur Snippet (1) speichert eine Referenz auf den StringBuilder in einer Variablen und (2) speichert die resultierende String-Referenz. Da die Referenzen jedoch die gleiche Größe haben, ergibt sich, unabhängig davon, auf was Bezug genommen wird, dieselbe Anzahl von belegten Bytes.

Verwandte Themen