12
votes

Constructeur vide de chaîne en Java

Je cherchais dans l'API de cordes et je suis soudainement rencontré un constructeur vide de chaîne I.e. Nous pouvons construire un objet de chaîne vide à l'aide de String S = nouvelle chaîne ()

Je me demande existe une utilisation de cela?


4 commentaires

Question interessante. Les Javadocs pour String () State "Notez que l'utilisation de ce constructeur est inutile car les chaînes sont immuables."


Je pense que si vous utilisez un objet s initialisé, Java vous donne NullPointerException .. et tel s contient une chaîne vide


Juste pour INIT `initialise un objet de chaîne nouvellement créé afin qu'il représente une séquence de caractères vide.


C'est une bonne question sur le sujet et ne doit pas être supprimée. L'existence de ce constructeur semble en effet étrange et on pourrait se demander s'il s'agissait d'une erreur des concepteurs de la bibliothèque, peut-être conservée uniquement pour la compatibilité à l'envers, ou s'il y avait un cas d'utilisation subtil.


6 Réponses :


4
votes

Il crée la chaîne vide, qui semble avoir une utilisation limitée.

Si vous construisez une chaîne en concaténant et n'utilisez pas par ex. stringbuiler , votre code peut commencer comme l'une des suivantes. xxx

Les deux premiers ne sont pas équivalents, et Vous devriez préférer initialiser avec "" car cela peut profiter de String Interning .


2 commentaires

Aucun point à appeler nouvelle chaîne () si vous pouvez utiliser le littéral "". Ces deux ne sont pas équivalents, car le constructeur crée une nouvelle instance, mais le "" littéral utilise l'instance internée dans un pool d'exécution.


@Natix édité, ma réponse a fait suggère les deux étaient équivalents.



11
votes

5 commentaires

Un littéral à chaîne peut être gc-ed. Ce que certains courants sont probablement fortement référencés dans la vie jvm.


J'ai entendu dire que la ficelle interne peut être GC'ed à partir de Java 7.


Je suis vraiment difficile à réfléchir à un scénario où il importe réellement si une instance d'une chaîne vide peut être recueillie ou non.


"" va dans la chaîne constante (littéral) piscine, tandis que nouvelle chaîne () passe en tas.


"Cela ne sera pas des ordures collectées" - hautement incorrect.



-1
votes

Pour créer une chaîne vide, appelez le constructeur par défaut comme String s nouvelle chaîne ();

créera une instance de chaîne sans caractères.


0 commentaires

0
votes

Selon la documentation, ce constructeur crée une séquence vide.

public String()

Initializes a newly created String object so that it represents an empty character sequence. Note that use of this constructor is unnecessary since Strings are immutable.


0 commentaires

0
votes

Quelqu'un de fond d'abord

Parce que des chaînes de Java sont immuables, elles sont également "internes" - cela signifie que tous les littéraux string em> dans les classes chargées sont conservées dans une piscine, donc il y a donc Habituellement, une seule instance de chaque littéral à chaîne unique en mémoire à la fois. Il s'agit d'une application du modèle EM> EM>, des pools similaires sont également conservés pour des objets entier et d'autres objets d'emballage primitif (mais uniquement pour un nombre limité de petites valeurs). P>

à cause de cette Mécanisme, comparaison d'identité des littéraux à chaîne (même de différentes classes) est généralement possible (bien que vous devriez toujours utiliser égale code> méthode lors de la comparaison des chaînes de sécurité et de cohérence): P>

String longString = readVeryLongString();
String shortString = new String(longString.subString(0, 10));


2 commentaires

C'est une bonne explication de ce que nouvelle chaîne (existentions) est utile pour, mais la question était en réalité sur nouvelle chaîne () sans arguments. : - /


Oui, tu as raison, je me suis emporté un peu. :) Je vais essayer de mettre à jour la réponse ...



3
votes

petit exemple ... La chaîne peut être des ordures recueillies xxx

au lieu de xxx


0 commentaires