Comment est StringBuffer .ajouter
Je suis en train de faire un projet informatique et j'ai besoin d'intégrer StringBuffer
s. J'ai besoin d'aide avec ce .append
et de concaténer des moyens. Quelqu'un m'a dit que je peux lui montrer qui est le gagnant (ma de jeu) à l'aide de .append
avec StringBuffer
.
public static void winner ()
{
if (position1 >= 100){
System.out.println("THE WINNER IS " + name1);
}
else if (position2 >= 100){
System.out.println("THE WINNER IS " + name2);
}
}
Au lieu d'avoir le nom des chaînes de caractères, puis-je utiliser StringBuffer
à la sortie qui a gagné le jeu?
Simple concaténation de deux chaînes de caractères n'est pas différent de l'aide
Utilisation
StringBuffer
.Utilisation
StringBuilder
à la place et vous serez gagnant par un long de la marge 🙂 de toute façon il fonctionne comme ceci new StringBuilder("THE WINNER IS ").append(name1).toString()
et la même chose s'applique pour StringBuffer
OriginalL'auteur user1965081 | 2013-01-11
Vous devez vous connecter pour publier un commentaire.
Merci pour le compilateur, vous utilisez déjà
StringBuilder
qui est la plus récente, la version plus rapide deStringBuffer
.Votre code ci-dessus va compiler à l'équivalent de:
Donc, dans ce cas, vous ne seriez pas l'accomplissement de tout ce qui n'est pas déjà fait pour vous. Utilisation
StringBuilder
lorsque vous créez unString
dans une boucle.Dans votre situation, ils étaient probablement parler de pré-initialisation d'un seul StringBuilder pour les deux cas:
Le nom complet est
java.lang.StringBuilder
, de sorte que vous n'avez pas besoin de l'importer.OriginalL'auteur Brigham
Vous voulez probablement quelque chose comme:
MAIS généralement StringBuilder est préféré à StringBuffer que l'accès à l'StringBuffer est synchronisé.
Ce n'est pas vraiment nécessaire ici, je l'ai juste fait pour le code de la clarté ainsi vous pouvez consulter la javadoc de voir comment .toString() est redéfinie dans StringBuffer (bit.ly/UWKIwq). Système..println(foo) fait appel de la Chaîne.valueOf(foo), qui à son tour appelle toto.toString(), de sorte que vous en fait, il suffit de ne Système de..println(sb.append(nom1)); et le Système..println(sb.append(nom2)); sur chacune de ces lignes 🙂
OriginalL'auteur phippsnatch
Petite chaîne ajoute et concats n'est généralement pas voir beaucoup de gagner de l'utilisation de
StringBuilder
mais juste garder à l'esprit qu'une chaîne de ajouter a 3, 1 nouvelle allocation composé de la taille des chaînes ajoutées, et 2 opérations de copie pour copier le contenu (ce qui signifie que vous avez maintenant 3 chaînes en mémoire), avecStringBuilder
vous venez d'ajouter et de redimensionnement à une largeur fixe de la mémoire tampon qui nécessite seulement 1 copie la plupart du temps (coût amorti copie, parfois vous avez besoin de redimensionner qui prend 2). Si vous ajoutez beaucoup en 1 chaîne je vous conseille d'utiliserStringBuilder
à la place, mais pour concatentations comme la vôtre, vous ne devriez pas voir une perte de performance (mesurables au moins).OriginalL'auteur Jesus Ramos
Vous pouvez, depuis
System.out.println
va convertir son argument d'uneString
automatiquement, donc résultant du contenu de laStringBuffer
. Le plus souvent, vous allez utiliser lorsque vous en avez besoin pour effectuer une itération sur un ensemble de données.Avec le
append
méthode, vous pouvez ajouter des données dans la mémoire tampon:entraînera -->
string valuetesting
Remarque: Il pourrait être préférable d'envisager
StringBuilder
à la place.OriginalL'auteur asgoth
L'idée d'utiliser
StringBuffer
ouStringBuilder
est d'éviter la répétition de concaténation de Chaînes de caractèrescomme l'ont montré ci-dessous:
Ce n'est pas efficace, dans chaque boucle un objet String est (java interne) créé
Utiliser StringBuilder /StringBuffer:
Cela évite d'inutiles création de chaînes dans chaque boucle, tout simplement, il remplit le tampon avec des personnages, et de redimensionner le tampon en cas de besoin.
Cependant dans votre cas, il ne vaut pas l'effort.
OriginalL'auteur AlexWien
Oui, vous pouvez. Comme tout le monde l'a souligné, StringBuffer.toString() vider le contenu comme une Chaîne de caractères. La question que vous devez vous poser est, faire vous vous souciez vraiment de ce que vous utilisez ou avez-vous particulièrement vous souhaitez utiliser StringBuffer pour apprendre quelque chose.
De votre opération, on est aussi bon que les autres. Si vous voulez vraiment faire ce que votre ami vous dit, je pense que les gens ici ont répondu clairement.
Ou vous pouvez dire à votre ami de, "Il n'a pas d'importance. L'un est aussi bon que les autres dans mon cas" 🙂
OriginalL'auteur Farhan Syed
Pour obtenir la version synchronisée de la chaîne recommandé d'utiliser StringBuffer où le fil de sécurité est élevé requis . Pour les non-utilisation synchronisée classe StringBuilder où thread-la sécurité n'est pas nécessaire, et notre application donnera de meilleures performances ..
OriginalL'auteur Pawananjay