Questions sur les lignes Piscine Java
Considérez ce code:
Lorsque vous utilisez un mot-clé
Java Créer à nouveau
, droit?
Sera-t-il stocké dans un tas ordinaire ou dans une balle
?
combien de
s Se termine dans la piscine
?
String first = "abc";
String second = new String/"abc"/;
Lorsque vous utilisez un mot-clé
new
Java Créer à nouveau
abc
String
, droit?
Sera-t-il stocké dans un tas ordinaire ou dans une balle
String
?
combien de
String
s Se termine dans la piscine
String
?
Aucun résultat connexe trouvé
Invité:
Pour répondre aux questions, connectez-vous ou registre
7 réponses
Agathe
Confirmation de:
, Un nouvel objet sera créé.
. Veuillez noter que les objets sont toujours dans une pile. - Les rangées de la piscine ne sont pas une zone de mémoire séparée, qui est séparée d'un tas.
Les lignes de piscine ressemblent à un cache. Si vous le faites:
Puis le compilateur Java assez intelligent pour créer un seul objet
, et
et
se référera à l'objet de la même chaîne. Si vous le faites:
Ensuite, il y aura un objet dans la piscine
, littéral
, et il y aura un objet séparé
, Pas dans la piscine, qui contient une copie du contenu de l'objet combiné. Dans la mesure où
Inchangé B. Java, Vous n'obtenez rien, le faire; appeler
n'a jamais de sens dans Java Et inefficace inutile.
Notez que vous pouvez appeler
Pour l'objet
. Cela placera l'objet
Dans la piscine, si cela n'existe pas, et retournera le lien vers la chaîne United. /S'il était déjà dans la piscine, il renvoie juste une référence à l'objet qui était déjà là/. Pour plus d'informations, voir la documentation API Pour cette méthode.
voir également
http://en.wikipedia.org/wiki/String_interning
/Wikipédia/.
Giselle
Confirmation de:
octet
-Code première tâche est:
Code:
0: ldc #2; //String abc
2: astore_1
Alors que la seconde:
3: new #3; //class java/lang/String
6: dup
7: ldc #2; //String abc
9: invokespecial #4; //Method java/lang/String."":/Ljava/lang/String;/V
Ainsi, le premier est dans la piscine /en position #2/, Tandis que la seconde sera stockée dans un tas.
EDIT
Dans la mesure où
http://docs.oracle.com/javase/ ... 4.4.3
/16 Peu, aucun signe/, la piscine peut ne plus contenir plus
=
Liens. Dans le cas où vous êtes inquiet
http://docs.oracle.com/javase/ ... -4.11
.
Catherine
Confirmation de:
par exemple:
dans JVM Vérifie d'abord le bassin littéral à chaîne. Si la chaîne existe déjà dans la piscine, le lien vers l'instance de pool est renvoyé. Si la ligne n'existe pas dans la piscine, un nouvel objet est créé. String, Puis placé dans la piscine. Java peut faire cette optimisation, car les cordes sont immuables et peuvent être divisées sans crainte des dommages causés par les données
Dominique
Confirmation de:
et
Les deux expressions vous donnent un objet de chaîne, mais il y a une différence subtile entre eux. Lorsque vous créez un objet de chaîne à l'aide de l'opérateur new//, Il crée toujours un nouvel objet dans un tas de mémoire. D'autre part, si vous créez un objet en utilisant une syntaxe littérale à chaîne, par exemple "Java", Il peut retourner l'objet existant de la piscine de chaînes. /Cache d'un objet de chaîne dans l'espace Perm gen, qui est maintenant déplacé dans le tas d'espace dans une version récente Java/, Si cela existe déjà.
Blanche
Confirmation de:
Hannah
Confirmation de:
Dans le premier cas, un seul objet sera créé dans le pool.
Dans le second cas, deux objets en créeront un dans la piscine /S'il n'existait pas avant dans la piscine/ Et un dans une pile.
Lorsque vous passez une valeur de citations double ex: "abc", Vous créez un objet dans la piscine et transmettez-le à une conception de chaîne pour créer un nouvel objet avec la même valeur dans une pile.
Si vous avez vu un designer à cordes, vous pouvez voir qu'il faut une chaîne. Quelle est la chaîne? Avant de créer ce qui est cet objet de chaîne. Ce n'est rien de plus qu'un objet stocké dans la piscine de constantes de cordes.
Babette
Confirmation de:
Ainsi, tout sera créé 2 Un objet de l'instance. Un dans la piscine et l'autre dans un tas
Explication détaillée
Première ligne = "abc";
Voici un objet de chaîne avec le contenu "abc" Créé dans la piscine. Copie variable “first” indiquera l'objet de la piscine avec du contenu “abc”.
String second = nouvelle ligne /"abc"/;
Ici, dans une pile, un autre objet de chaîne sera créé avec du contenu. "abc". Copie variable “second” indiquera un objet de tas avec du contenu “abc”. Objet de chaîne avec création content "abc" Dans la piscine, vous manquerez à cause du 1er opérateur. La raison est ci-dessous.
Causes
Si le prétendu opérateur précédent /String first = "abc";/ n'existe pas avec le même contenu, alors généralement avec un mot clé “new” sera créé 2 Objet de chaîne: un dans un tas /Piscine extérieure/, et l'autre dans la piscine/La zone de sous-ensemble du tas/.
De plus, l'instance de variable "second" Doit indiquer qu'un seul objet de tas, que des objets soient dans la piscine ou non.
Maintenant à cause de la présence de l'opérateur précédent /String first = "abc";/ Avec le même contenu que dans la nouvelle ligne/"abc"/, Un seul objet est enregistré dans la piscine. /avec le contenu "abc"/.
Ainsi, à cause du 1er opérateur du deuxième opérateur, ne sera créé que 1 Objet à la place 2, Et cet objet est dans une pile. La création d'un objet de pool sera ignorée.