Maison  >  Article  >  Java  >  Analyser le rôle de stagiaire() en Java

Analyser le rôle de stagiaire() en Java

Y2J
Y2Joriginal
2017-05-19 09:43:433001parcourir

J'ai remarqué la méthode intern() de String en lisant un livre aujourd'hui. Je ne l'ai jamais utilisée auparavant, je n'ai vu que cette méthode auparavant, mais je ne l'ai pas regardée attentivement. J'ai donc jeté un oeil aujourd'hui. Personnellement, je pense que l'ajout de cette méthode à la classe String peut permettre d'améliorer un peu les performances, car la récupération des données du pool constant est plus rapide que la récupération des données du tas. (Sentiment personnel)

Les quelques phrases sur API à propos de cette méthode, en fait, le résumé est qu'après avoir appelé cette méthode, la stringobject Rejoignez le pool de constantes.Nous savons tous que le pool de constantes existe dans la zone de méthode, et la zone de méthode est partagée par les threads, donc le pool de constantes est également partagé par les threads, mais c'est le cas. pas sans threadSafe , il est en fait thread-safe. Cela fait simplement que la référence avec la même valeur pointe vers le même emplacement si la valeur de référence change, mais il n'y en a pas. nouvelle valeur dans le pool de constantes, Ensuite, un nouveau résultat constant sera ouvert et transmis à la nouvelle référence, au lieu du même objet que lorsque le thread n'est pas synchronisé, la chaîne de nouveau est directement affectée à la variable Les chaînes sont stockées à différents endroits. La première est dans le tas, tandis que la seconde est dans le pool constant De plus, lors des opérations d'épissage de chaînes, c'est-à-dire lorsque les chaînes sont combinées avec ". +", le résultat est qu'il y a Dans le pool ou le tas constant, cela peut varier selon la situation. J'ai écrit quelques lignes de code pour le tester.

D'abord le résultat :

1. Attribuez une valeur lors de la définition directe d'une variable chaîne. S'il n'y a qu'une constante chaîne sur le côté droit de l' expression , alors la variable est stockée dans le pool de constantes.

2. La chaîne produite par new est stockée dans le tas.

3. Lors de l'épissage de chaînes, c'est-à-dire lors de l'opération "+", il existe deux situations :

i Le côté droit de l'expression est une constante de chaîne pure, alors il. est stocké dans la pile.

ii. S'il y a une référence de chaîne sur le côté droit de l'expression, qui est le handle de l'objet chaîne, elle sera stockée dans le tas.

   String str1 = "aaa";
        String str2 = "bbb";
        String str3 = "aaabbb";
        String str4 = str1 + str2;
        String str5 = "aaa" + "bbb";
        System.out.
print
ln(str3 == str4); // false
        System.out.println(str3 == str4.intern()); // true
        System.out.println(str3 == str5);// true

Résultats : str1, str2, str3 et str5 existent tous dans le pool de constantes. Puisque str4 a un type référence sur la moitié droite de l'expression, str4 existe dans la mémoire du tas, tandis que str5 en a. aucun type de référence sur le côté droit de l'expression, est une constante de chaîne pure, qui est stockée dans le pool de constantes. En fait, Integer -128 ~ +127 de ce type d'emballage est également stocké dans le pool de constantes. Par exemple, Integer i1 = 10; Integer i1 == i2; ce qui est probablement pour Optimisation des performances .

[Recommandations associées]

1. Tutoriel vidéo gratuit Java

2. Explication détaillée de intern() dans l'objet String

3.

Analyse approfondie de la méthode intern() en Java

4

Résumé de l'expérience d'utilisation de la méthode intern() en JAVA.

5.

Quel est le concept de méthode interne en java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn