Les égaux Java sont assez désagréables

introduction

Bonjour, c'est Kechon. ** Êtes-vous en train d'écrire Java? ** ** Je n'ai pas codé ces derniers mois. J'ai commencé à étudier l'or de Java à la hâte (à partir d'aujourd'hui) Je voudrais le présenter car je me sentais mal à l'aise à ce moment-là.

Ce qui était désagréable

Comment comparez-vous des chaînes lorsque vous les comparez?

Pour les programmeurs amateurs

String str1 = "test";
String str2 = "test";
if (str1 == str2) {
	System.out.print("same");
} else {
	System.out.print("diff");
}

Oui, ce n'est pas bon. Je me fâche si j'écris ce code. Oui. L'opérateur "==" compare les adresses mémoire des objets.

Différents objets ont fondamentalement des adresses mémoire différentes. Cette fois, je veux comparer la chaîne de caractères de l'objet, ce qui est contre mon intention.

**, mais dans ce cas "même" est affiché. ** ** Soyez prudent car la chaîne elle-même est désagréable. Ce n'est pas le sujet principal et je ne le connais pas en détail, je vais donc l'omettre.

Pour les programmeurs généraux

String str1 = "1";
String str2 = "1";
if (str1.equals(str2)) {
	System.out.print("same");
} else {
	System.out.print("diff");
}

C'est normal. Je le vois souvent. Mais avez-vous déjà vu le contenu d'Object.equals?

Le contenu est ...

public boolean equals(Object obj) {
    return (this == obj);
}

** "==" Utilisez-le!

J'étais en colère quand j'étais en colère contre "==".

Résumé

La comparaison des chaînes de caractères est la même pour les égaux et "==" ????

Non non

** Bien sûr que non. ** **

La méthode equals est remplacée par la classe String. Vous trouverez ci-dessous le contenu de String.equals.

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String aString = (String)anObject;
        if (coder() == aString.coder()) {
            return isLatin1() ? StringLatin1.equals(value, aString.value)
                              : StringUTF16.equals(value, aString.value);
        }
    }
    return false;
}

Cela utilise également "==", mais si l'adresse mémoire est différente, vous effectuez une autre comparaison.

Résumé

Object.equals est juste une comparaison avec "==" String.equals est comparé à "==", mais si la cible de comparaison est une chaîne de caractères, elle se comporte spécialement (c'est le mouvement attendu)

Recommended Posts

Les égaux Java sont assez désagréables
[Java] Différence entre == et égal
[Java Silver] À propos de la méthode equals
[Java] HashCode et remplacement égal
Que sont les métriques Java? _Memo_20200818
Pourquoi les variables de classe sont-elles nécessaires? [Java]
[Java débutant] == opérateur et méthode equals
Les variables de tableau Java sont des types de référence
Comprendre equals et hashCode en Java
Les variables locales Java sont thread-safe
[Java] Que sont les remplacements et les surcharges?