2017-07-29 2 views
2

Ich möchte den Unterschied in zwei Ansätze kennen. Es gibt einige alte Codes, an denen ich jetzt arbeite, wo sie primitive Werte auf einen String Wert durch Verketten mit einem leeren String "" setzen.String.valueOf (someVar) vs ("" + someVar)

obj.setSomeString("" + primitiveVariable); 

Aber in diesem Link Size of empty Java String es sagt, dass Wenn Sie für jede Instanz eine separate leere Zeichenfolge erstellen, dann nimmt das wird offensichtlich mehr Speicher.

Also dachte ich an valueOf Methode in String Klasse. Ich überprüfte die Dokumentation String.valueOf() es sagt Wenn das Argument null ist, dann eine Zeichenfolge gleich "null"; Andernfalls wird der Wert von obj.toString() zurückgegeben.

so das man der bessere Weg

  1. obj.setSomeString("" + primitiveVariable);
  2. obj.setSomeString(String.valueOf(primitiveVariable));

Der oben beschriebene Prozess der innerhalb eines List Iteration durchgeführt wird, die eine Größe von mehr als 600 aufweist, und wird voraussichtlich in Zukunft steigen.

+0

Sie haben den Hauptpunkt der verknüpften Antwort falsch verstanden. Sie erstellen ** nicht ** eine neue Instanz. – luk2302

+0

aber wenn wir einen leeren String codieren und die entsprechende Klasse ausgeführt wird, wird ein String-Objekt für diesen leeren String erstellt, oder? –

+0

@ luk2302 Ja ist es. Das ist, was zurückkehrt. –

Antwort

2

Wenn Sie "" tun, die nicht ein Objekt erstellen wird. Es wird ein String-Literal erstellt. There is a differenc (How can a string be initialized using " "?) tatsächlich.

kommend zu Ihrer eigentlichen Frage,

Von String concatenation docs

Die Programmiersprache Java bietet spezielle Unterstützung für den String-Verkettungsoperator (+), und für die Umwandlung von anderen Objekten in Strings. Die Verkettung von Zeichenfolgen wird über die StringBuilder- (oder StringBuffer-) Klasse und ihre append-Methode implementiert.

So unnötigerweise erstellen Sie StringBuilder-Objekt und dann gibt das ein anderes String-Objekt.

Allerdings valueOf geben Sie direkt ein String-Objekt. TU es einfach.

Neben der Leistung, denke nur allgemein.Warum verkettet man mit einer leeren Zeichenkette, wenn man eigentlich das int in String umwandeln will :)

2

Q. Also das ist der bessere Weg

A. obj.setSomeString(String.valueOf(primitiveVariable)) ist in der Regel der bessere Weg. Es ist sauberer und häuslicher. Dies druckt den Wert primitiveVariable als String, während der andere es als int Wert ausgibt. Der zweite Weg ist eher ein "Hack" und weniger organisiert. Der andere Weg, es zu tun, ist Integer.toString(primitiveVariable), die im Grunde das gleiche wie String.valueOf ist.

Schauen Sie auch bei this post und this one too

Verwandte Themen