Pour les débutants en Java, au lieu de regarder la signification de l'opérateur d'égalité (==) pour String, "s'ils ont la même valeur" Je pense que l'un des points d'apprentissage est de voir "si les références sont les mêmes".
Test1.java
public static void main(String[] args) {
String str1 = "100";// ⓵
String str2 = new String("100"); // ⓶
System.out.println(str1 == str2); //Devenez faux.
}
}
Je comprends que ce sera faux pour le moment. Mais String peut être initialisé avec ⓵ ou ⓶. Quand les références seront-elles les mêmes? Par exemple:
Test2.java
public static void main(String[] args) {
String str1 = "100";
String str2 = "100";
System.out.println(str1 == str2); //Devenir vrai.
}
}
Dans l'exemple ci-dessus, ce sera True. Eh bien, j'ai pensé que ce serait faux parce que j'ai créé deux variables de type de référence différentes. Il semble que str1 et str2 regardent la même référence à ce moment parce que l'opérateur d'égalité regarde "si la référence est la même".
Je me demandais ce que cela signifiait. Après avoir fait le tour, ce qui suit est sorti. Référence: Découvrez l'impact sur les performances lors de l'utilisation de String # intern ()
Le point est, dans String, s'il existe une méthode Intern (), et si vous l'utilisez, il y a un objet String avec la même chaîne de caractères, Il semble que toutes les références soient disponibles. Cela réduira le gaspillage de mémoire. Il est inefficace de créer des objets un par un même s'ils ont la même valeur.
Cela ne se produit-il pas dans Test2.java? Autrement dit, la méthode Intern () est automatiquement appliquée lors de l'initialisation. De cette façon, vous ne perdrez pas de mémoire. Que se passe-t-il dans les cas suivants?
Test3.java
public static void main(String[] args) {
String str1 = new String("100");
String str2 = new String("100");
System.out.println(str1 == str2);
}
}
Dans ce cas, cela semble être faux. Le fait est que lors de l'initialisation avec new ~~, la méthode Intern () n'est pas appliquée et elle est simplement appelée new, il semble donc que vous créez un nouvel objet.
Résumé, -Si str1 = "100" et str2 = "100", la destination de référence sera la même. -Lors de l'initialisation avec une nouvelle chaîne ("100"), un nouvel objet est créé, donc la destination de référence est différente.
En passant, j'ai également exécuté ce qui suit pour savoir si cet événement se produit dans le type de référence ou si la chaîne est spéciale.
Test4.java
public static void main(String[] args) {
Integer int1 = 100;
Integer int2 = 100;
System.out.println(str1 == str2);
}
}
C'était vrai. Dans le cas du type de référence, je me demande si l'on peut dire que fondamentalement le même point de référence est vu à moins que nouveau ne soit écrit.
Recommended Posts