À propos de la relation entre l'opérateur d'égalité de chaîne Java (==) et l'initialisation. Débutants

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

À propos de la relation entre l'opérateur d'égalité de chaîne Java (==) et l'initialisation. Débutants
À propos de la relation entre les méthodes HTTP, les actions et CRUD
[Java] À propos de String et StringBuilder
Pensez aux différences entre les fonctions et les méthodes (en Java)
La relation entre la vérification stricte de la date Java et l'heure d'été
Relation entre les modificateurs d'accès kotlin et java
[Pour les débutants] Différence entre Java et Kotlin
À propos de la différence entre irb et pry
Interpréter la relation entre les méthodes Java et les arguments en formules biochimiques
[Java] Comprendre la différence entre List et Set
[Rails / Active Record] À propos de la différence entre créer et créer!
[Java] La partie déroutante de String et StringBuilder
Résumer les différences entre l'écriture C # et Java
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
[Rails] J'ai étudié la différence entre les ressources et les ressources
[Java] Comparaison des chaînes de caractères et && et ||
Différences entre les classes et les instances dans Ruby
À propos de l'opérateur ternaire
[Java Silver] À propos de l'initialisation
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
[Java] À propos de Objects.equals () et examen de la comparaison de chaînes (== et égal à)
À propos de la classe Java String
À propos du chargement et de l'initialisation des classes au démarrage de la JVM
Vérification de la relation entre l'image Docker et le conteneur
Les débutants en Java ont brièvement résumé le comportement de Array et ArrayList
[Pour les débutants] À propos de la syntaxe JavaScript expliquée par Java Gold
[Java] Vérifiez la différence entre orElse et orElseGet avec IntStream
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
Etudier Java # 2 (\ marque et opérateur)
[Java] Différence entre == et égal
Relation entre le contrôleur et la vue
À peu près la même et la même valeur
Relation entre le package et la classe
À propos du package Java et de l'importation
Différences entre gets et gets.chomp (autres que les sauts de ligne)
[Ruby] Relation entre la classe parent et la classe enfant. Relation entre classe et instance.
[Java] Structure d'introduction Définition de classe Relation entre classe et instance Format de définition de méthode
J'ai essayé de résumer les méthodes de Java String et StringBuilder
[Java] Quelle est la différence entre form, entity et dto? [Haricot]
[Java] Comment convertir du type String en type Path et obtenir le chemin
À propos des méthodes Java statiques et non statiques
Différence entre l'opérateur == et la méthode égale
[Java] Différence entre Hashmap et HashTable
Déclaration, initialisation et types de variables Java
À propos de Biocontainers fastqc et Java
Java pour les débutants, les expressions et les opérateurs 1
À propos des méthodes equals () et hashcode ()
Différence entre l'opérateur == et la méthode eqals
[Java débutant] À propos de l'abstraction et de l'interface
Java pour les débutants, les expressions et les opérateurs 2
[Java débutant] == opérateur et méthode equals
À propos de l'environnement de développement actuel (Java 8)
[JAVA] Différence entre abstrait et interface