2013-01-13 1 views
0

J'ai une chaîne qui est déjà initialisée. Maintenant, je veux remplacer le contenu avec un tableau de caractères. Je voudrais savoir si faire ce qui suit:Comment copier une chaîne existante avec un tableau de caractères en Java

stringObj = new String(charArr); 

est bien?

Cela entraînerait-il des fuites de mémoire?

Désolé si cette question a déjà été répondu, je n'ai pas trouvé la réponse à tout cela.

+0

Non. Cela semble bon! – Sanchit

Répondre

1

Bien sûr, c'est bon. La référence fait référence à une nouvelle chaîne. L'ancien est éligible pour GC.

Il existe certaines considérations concernant l'espace interne et temporaire, mais il n'y a pas de fuite de mémoire. C'est ainsi que fonctionne Java.

Votre code ne sera pas endommagé par une telle construction. Il est bon d'être conscient des meilleures pratiques, mais l'optimisation prématurée sans données est un jeu perdant. Rédigez votre application au mieux de vos capacités, présentez-la si la performance est inacceptable et résolvez les problèmes qui contribuent le plus à votre problème de performance. N'essayez pas d'imaginer que vous savez où seront les problèmes.

0

Puisque la chaîne est immuable, vous obtiendrez éventuellement un nouvel objet qui ne sera pas remplacé par l'objet précédent. Pour cet exemple, il n'y aura pas de fuites de mémoire car il s'agit d'une seule chaîne, mais si votre application est basée sur une énorme quantité de manipulation de chaînes, il y aura des fuites de mémoire. Vous devriez utiliser StringBuffer ou String Builder.

0

Il est important de comprendre que vous avez seulement changé la référence à la chaîne. Si vous avez d'autres références, elles pointent toujours vers l'ancien objet String. Cela permettrait à la fois d'éviter le ramassage des ordures et de continuer à utiliser l'ancienne valeur.

En particulier, si vous faites ceci dans une méthode qui a été passée stringObj comme argument, les références de l'appelant ne sont pas affectées par l'affectation.

En d'autres termes, stringObj est et non un objet. C'est un pointeur sur un objet. Vous modifiez ce seul pointeur de sorte qu'il pointe vers un nouvel objet.

0
String stringobj = "This is fine"; 

stringobj = new String(charArray); 

fait maintenant stringobj contiendra la référence de l'emplacement de mémoire contenant new Array Char et l'emplacement précédent sera pris en charge par le Garbage Collector.

Questions connexes