Bonjour.
Je sais que lorsque l'on compare deux objets avec le symbole ==, cela ne vaut VRAI que lorsque les deux objets sont en fait la même instance. Je sais aussi que la méthode equals dans la classe Object fait par défaut un == si elle n'est pas redéfinie, du coup, si je veux que equals compare mes objets par rapport à leurs attributs, je dois la redéfinir.
Mais là où je bloque, c'est avec les Strings. J'ai le code suivant :
Ce code m'affiche en terminal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class Main { public static void main(String[] args) { String s = new String("Blabla"); String v = new String("Blabla"); System.out.println(s.hashCode()); System.out.println(v.hashCode()); if (s == v) System.out.println("s et v sont égales"); if (s.equals(v)) System.out.println("s et v sont égales sémantiquement"); } }
Je ne comprends pas pourquoi il rentre dans le second if. J'ai utiliser la déclaration new String, donc s et v ne sont pas les mêmes instances. Du coup, je ne rentre pas dans le premier if, mais je ne devrai pas non plus rentrer dans le second, vu que equals fait par défaut un ==.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 1992251584 1992251584 s et v sont égales sémantiquement
Pouvez-vous m'expliquer ?
merci
Partager