La différence entre une chaîne et d'un tableau de caractères
Comment sont ces déclarations différents les uns des autres?
String s="MY PROFESSION";
char c[]="MY PROFESSION";
Que sur l'allocation de mémoire dans chaque cas?
Comment pouvez-vous comparer ces deux si ce dernier n'existe même pas?
Une Chaîne de caractères est un objet composite qui contient un tableau de char, en plus de certains autres domaines.
un
Une Chaîne de caractères est un objet composite qui contient un tableau de char, en plus de certains autres domaines.
un
String
est (une instance d'une classe qui est livré avec un lot de la Chaîne des opérations. Java dispose d'un grand nombre de fonctionnalités de langage associés à des chaînes de caractères (par exemple les littéraux de Chaîne que vous avez utilisé deux fois). Un char tableau sur l'autre main manque de ces méthodes, est mutable et a une plus petite empreinte mémoire. Toujours utiliser des chaînes de caractères, sauf si vous avez un problème très particulier qui nécessite des tableaux de char.OriginalL'auteur Shivaji More | 2013-08-17
Vous devez vous connecter pour publier un commentaire.
Pour corriger les erreur de compilation remplacer par l'un des ci-dessous
char[]
déclarationSection suivante compare déclaration ci-dessus les uns avec les autres
Constante De Chaîne
s
est immuable j'.e contenu deString
est intact ne peut pas être modifié.Tableau De Caractères
c1
détient copie de la Chaîne de sous-jacents array (viaSystem.arraycopy
) et stockées dans la mémoirec2
est construit à la volée dans le cadre de la pile par le chargement d'un caractère individuel des constantesc1
&c2
sont mutables je.e contenu deArray
peut être modifié.c2[0]='B'
StringBuilder /StringBuffer
sb
etsbu
sont mutables.sb.replace(0, 1, 'B');
sb
etsbu
sont stockés en tassb.append( '!');
StringBuffer
's méthodes de synchronisation de toutStringBuilder
's méthodes ne sont pasOriginalL'auteur Prashant Bhate
La première compile. Le second ne l'est pas.
Un
char[]
est juste que: un tableau de primitif numéros de type char. Tous, il fournit unlength
attribut, et une façon d'obtenir et de définir un char à un index donné.Une Chaîne de caractères est un objet de type java.lang.Chaîne, qui a tout un tas de méthodes utiles pour la manipulation de Chaînes de caractères. En interne, il utilise un tableau de char.
Une autre caractéristique importante de la Chaîne, c'est qu'il est immuable. Vous pouvez passer d'une Chaîne à la méthode, et assurez-vous que cette méthode ne change pas le contenu de la Chaîne. Ce n'est pas le cas avec un tableau de char.
Concernant la mémoire, une Chaîne consomme quelques octets, mais ce n'est généralement pas ce qui doit guider vos décisions de conception: généralement, l'utilisation d'un char tableau n'est pas ce que vous devriez faire.
OriginalL'auteur JB Nizet
Si vous voyez le docs,
Plus sur Les littéraux de chaîne sont très spéciaux en java
String
est soutenu par unecharacter
tableau en interne.OriginalL'auteur Suresh Atta
D'un tableau de caractères est mutable, en d'autres termes, vous pouvez remplacer un caractère dans un tableau de caractères à l'écrasement de l'emplacement de la mémoire de ce personnage.
Une Chaîne de caractères n'est pas mutable, en d'autres termes, pour "remplacer" un caractère dans une Chaîne, vous devez créer une nouvelle Chaîne avec le caractère souhaité en place (copie de la non-changement de pièces de le vieux de la Chaîne).
Bien que cela semble simple, il a un impact profond sur la capacité de partager entre Thread (et des objets). Une Chaîne peut en toute sécurité être partagées entre les Threads sans contrôles supplémentaires pour voir si la Chaîne est en cours de modification (ce qui pourrait donner un Thread une incohérence de la lecture de la Chaîne).
D'autres optimisations sont également possibles, depuis les Chaînes ne peuvent muter, vous pouvez rewire l'égalité des opérations "est égale, en valeur". Ce qui signifie qu'une "Chaîne de l'usine" peut renvoyer les copies mises en cache de la même Chaîne, même lorsque deux objets de Chaîne de la demande, car il deviendra impossible pour les deux objets se comporter différemment.
OriginalL'auteur Edwin Buck
char
est un type primitif.String
est une classe dans laquelle des données sont stockées en interne comme un tableau de caractèresdonnera erreur de compilation.
Tableau de caractères est la zone de stockage dans la mémoire où les personnages sont stockées de manière séquentielle.
Découvrez ce Fil pour plus de détails.
OriginalL'auteur Rahul Tripathi
Votre première ligne de produit un
String
instance. La deuxième ligne est tout simplement pas valide; peut-être que vous avez voulu dire:qui crée
char[]
rempli avec les personnages.Stocker une chaîne de caractères comme un
String
est légèrement différente de la mémoire-sage de les stocker en tant quechar[]
. Il y a des similitudes: les deux sont des objets, et ont l'habitude de l'objet de frais généraux.Cependant, un
String
est titulaire d'unchar[]
en interne, alors, naturellement, unString
consomme plus de mémoire. En outre,String
a 3int
champs (offset
,count
ethash
) alors quechar[]
a le seulint
champlength
.Par exemple, le stockage
"MY PROFESSION"
comme unString
:int
champs: 12 octetschar[]
champ: 8 octetsint
champ: 4 octetsCe qui vient à propos 66 octets. Je dis "environ" parce que certains de ceci dépend de la machine virtuelle. Le correspondant
char[]
de longueur 10 ne consomme 38 octets, comme vous pouvez le voir. La mémoire différence ici est tout à fait négligeable, de sorte que vous ne devriez pas vous inquiéter à ce sujet (et il suffit d'utiliser unString
!). Il devient même le plus insignifiant, le plus long de la chaîne que vous voulez stocker.OriginalL'auteur arshajii
char est un type primitif, tandis que String est une classe.
Un tableau d'un certain nombre de chaînes et de cordes sont un ensemble de caractères.
OriginalL'auteur Shivam