[Java] Différence entre equals et == dans une chaîne de caractères qui est un type de référence

Comparaison des emplacements de référence et comparaison des valeurs

Méthode de comparaison Contenu
equals Comparaison des zones de mémoire
== Comparaison des valeurs

Exemple de programme

public class MyApp {
		
	public static void main(String[] args) {

		String s1 = "ab"; //Stocker la zone de mémoire
		String s2 = "ab"; //Stocker la zone de mémoire (même zone que ci-dessus)

		if(s1.equals(s2)) { //Comparez si le contenu est le même
			System.out.println("same1 equals");
		}

		if(s1 == s2) { //Comparaison des types de données de base
			System.out.println("same2 ==");
		}
		//Générer un objet string (avec la méthode equals)
		String ss1 = new String("ab"); //Stockage de la zone de mémoire
		String ss2 = new String("ab"); //Stockage de la zone de mémoire (créer une autre zone à partir de ce qui précède)

		//Comparaison des types de données de base
		if(ss1 == ss2) { //Puisque la zone de mémoire est comparée, elle sera fausse et ne sera pas exécutée.
			System.out.println("same3 ==objet");
		}
		//Comparaison du contenu des données
		if(ss1.equals(ss2)) {
			System.out.println("même4 est égal à un objet"); //Exécuté car la zone mémoire est différente mais la valeur est la même
		}
	}
}

Exemple d'exécution

same1 equals
same2 ==
même4 est égal à un objet

La chaîne de caractères a une habitude

Dans la chaîne de caractères qui est à l'origine un type de référence, l'emplacement de la zone de mémoire de la destination de référence est stocké dans la variable.

Et, dans l'exemple, la même chaîne de caractères ʻab` est affectée à s1 et s2, mais l'emplacement de la zone mémoire est entré dans s1 et la même chaîne de caractères est affectée à s2, donc la même mémoire Il semble que l'emplacement de la zone sera inclus. En d'autres termes

String s1 = "ab";
String s2 = s1;

Même sens que? devenir.

Quand je l'essaye

same1 equals
same2 ==
même4 est égal à un objet

Que se passe-t-il si l'emplacement de référence est le même et que la valeur de référence est renvoyée dans les deux cas? Le fait de ne changer que la valeur de s1 change-t-il les deux?

String s1 = "ab";
String s2 = s1;
s2 = "cd";

Que se passe-t-il si vous faites ... Facile à comprendre

		System.out.println("s1: " + s1);
		System.out.println("s2: " + s2);

Et courir.

s1: ab
s2: cd
même4 est égal à un objet

Seul s2 a été modifié et n'est pas reflété dans s1.

En parlant de cela, la chaîne de caractères se comporte de la même manière que le type de données de base, et elle se comporte de la même manière que le type int. .. ..

Cela signifie-t-il que la même destination de référence est créée alors que les valeurs sont les mêmes et qu'une nouvelle zone de mémoire est créée lorsque les valeurs sont mises à jour?

C'est compliqué, mais j'ai essayé et compris à nouveau.

S'il s'agit d'un tableau, les deux valeurs seront mises à jour. Revoir la revue!

Recommended Posts

[Java] Différence entre equals et == dans une chaîne de caractères qui est un type de référence
[Java] Différence entre == et égal
Différence entre le type primitif et le type de référence
[Java] Différence entre l’affectation d’une variable de type de base et l’affectation d’une variable de type de référence
L'évaluation des courts-circuits est-elle vraiment rapide? Différence entre && et & en Java
Différence entre final et immuable en Java
Maintenant dans la troisième année, le malentendu que j'ai remarqué est la différence entre la méthode equals et ==
Différence entre int et Integer en Java
Différence entre next () et nextLine () dans Java Scanner
[Java] Différence entre statique final et final dans les variables membres
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
[Java] Précautions lors du référencement dans une classe parent et de l'instanciation dans une classe enfant
Mémorandum n ° 4 "Obtenez une chaîne de caractères et décorez-la" [Java]
Différence entre l'élément 0, le caractère nul et le caractère vide (liste de contrôle)
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
Différence entre l'opérateur == et la méthode égale
[Java] Différence entre Hashmap et HashTable
[JAVA] Différence entre abstrait et interface
Qu'est-ce qu'une variable de type référence?
[Java] Différence entre array et ArrayList
Comprendre equals et hashCode en Java
[Java] Différence entre fermable et fermable automatiquement
[Java] Différence entre StringBuffer et StringBuilder
[Java] Différence entre longueur, longueur () et taille ()
Quelle est la différence entre un serveur Web et un serveur d'applications?
[Java] Quelle est la différence entre form, entity et dto? [Haricot]
[Java] Divise une chaîne de caractères par un caractère spécifié
Comment tester une méthode privée et la simuler partiellement en Java
Concernant la comparaison d'équivalence de type de chaîne en Java
[Explication facile à comprendre! ] Conversion de type de type de référence en Java
Une note sur les différences entre les interfaces et les classes abstraites en Java
Différence entre pop () et peek () dans la pile
[Pour les débutants] Différence entre Java et Kotlin
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce qu'une classe en langage Java (2 /?)
Différence entre getText () et getAttribute () de Selenium
Diviser une chaîne avec ". (Dot)" en Java
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
Différence entre les listes d'arry et les listes liées en Java
Différence entre EMPTY_ELEMENTDATA et DEFAULTCAPACITY_EMPTY_ELEMENTDATA dans ArrayList
Revue des connaissances «étranges Java» et Java souvent oubliées dans Java Bronze
[Java] Différence entre la plage Intstream et la plageClosed
Comprendre la différence entre int et Integer et BigInteger en java et float et double
[Java] Raccourcis Eclipse qui peuvent être améliorés en sachant lors des allers-retours entre le code source d'un projet
[Java] Comprendre la différence entre List et Set
Lire une chaîne dans un fichier PDF avec Java
Le type d'intersection introduit dans Java 10 est incroyable (?)
Code pour échapper aux chaînes JSON en Java
Un fichier bat qui utilise Java dans Windows
Quelle est la différence entre SimpleDateFormat et DateTimeFormatter? ??
Distinguer les nombres positifs et négatifs en Java
[Java] Différence entre "variable finale" et "objet immuable"
[Java] Lors de la mise d'une chaîne de caractères dans le cas de l'instruction switch, il est nécessaire d'en faire une expression constante
[Java] Une erreur de types incompatibles s'est produite lors de l'affectation d'une chaîne de caractères à une variable de type char.
Existe-t-il une différence de performances entre Oracle JDK et OpenJDK à la fin de 2017?