2009-05-27 10 views
0

Wie JVM die Erstellung von Objekt A in jeder Schleife verarbeitet? Wie unterscheidet sich "list" zwischen verschiedenen Instanzen? Es empfiehlt sich, bei jeder Iteration ein Objekt zu erstellen. Wenn nein, was ist die beste Lösung für das Hinzufügen eines Objekts zu einer Liste?Wie behandelt jvm das Erstellen von Objekten innerhalb einer Schleife?

+0

Ein kleiner Kompilierungsfehler tritt auf: Der Typ Liste kann nicht instanziiert werden. – guerda

Antwort

6

In Ihrem Beispiel wird bei jeder Iteration der Schleife ein neues Objekt erstellt. Die Liste der Lage ist, zwischen ihnen zu unterscheiden, weil es nicht, dass Sie alle nennen sie schert „a“ in Ihrem Code, es Spur von ihnen durch die Referenz hält, die jedes Mal, wenn Sie

a = new A(); 

Jedes Mal, rufen Sie erneut zugewiesen werden, dass Die Codezeile wird aufgerufen, ein neues Objekt wird auf dem Heap erstellt und die Adresse im Speicher wird der Referenz a zugewiesen. Es ist diese Referenz, die in der Liste aufgezeichnet wird, nicht der Variablenname.

Dies ist eine vollkommen schöne und normale Art, eine Liste zu füllen (abgesehen von den Syntaxfehlern, die andere erwähnt haben, von denen ich annehme, dass Sie sie reparieren können, wenn Sie versuchen, Ihren Code zu kompilieren).

2

Liste enthält einen Verweis auf jede Instanz eines Objekts, das erstellt wird. Es ist in Ordnung, jedes Objekt innerhalb der Schleife zu erstellen (ich gehe davon aus, dass Sie meinen, dass Sie die Variable 'a' außerhalb der Schleife deklarieren und sie dann jeder Iteration neu zuweisen).

+0

Ja. Du hast Recht. Einer meiner Freunde hat mir gesagt, dass es nicht gut ist, so viele Instanzen zu erstellen. Es kann die Leistung der Anwendung verringern. – Shashi

+2

@Shashi Bhushan: Sofern Sie nicht alle Instanzen benötigen, natürlich, in diesem Fall ist es sinnvoll, sie zu erstellen. :) – Eddie

+0

@Shashi jedoch ist das Erstellen mehrerer Instanzen vollkommen in Ordnung. – jrharshath

1

Ist es eine gute Vorgehensweise, bei jeder Iteration ein neues Objekt zu erstellen? Einer meiner Freunde sagte mir, dass es nicht gut ist, so viele Instanzen zu erstellen.

Wenn Sie verschiedene einzelne Instanzen benötigen, müssen Sie sie erstellen. Da Ihre Liste fünf Objekte mit jeweils unterschiedlichen Namen benötigt (ram, mohan, anil usw.), benötigen Sie für jede Iteration der Schleife ein neues Objekt. Wie sonst werden Sie die fünf Namen speichern?

Wie für die Variable a außerhalb der Schleife zu deklarieren, glaube ich nicht, dass dies einen Unterschied macht Leistung und reduziert auch die Lesbarkeit.

A a; // dont do this 
for(int i =0; i < test.length; i++){ 
    a = new A(); 
    a.setName(test[i]); 
    list.add(a); 
} 

Sie könnten in dem foreach-Schleife

for(String name: test){ 
    A a = new A(); 
    a.setName(name); 
    list.add(a); 
} 
1

interessiert sein, wenn mein Verständnis der JVM korrekt ist, muss der gepostete Code keinen Unterschied in der Leistung im Vergleich zu

for (String name : test) 
{ 
    list.add(new A(name)); 
} 

(vorausgesetzt natürlich, dass der Konstruktor A (String s) eine andere Möglichkeit ist, eine neue Instanz mit einem bestimmten Namen zu erstellen)

Verwandte Themen