Comparaison des chaînes en Java
Glissez pour afficher le menu
La comparaison est un domaine où Java commence à se comporter de manière un peu plus « bas niveau » que prévu. Il semble évident que les chaînes de caractères pourraient être comparées de la même manière que les nombres — en utilisant ==. Après tout, si deux chaînes semblent identiques, pourquoi ne seraient-elles pas égales ?
Le problème avec ==
Si vous utilisez == avec des littéraux de chaîne, cela semble fonctionner correctement au début :
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }
Les deux variables pointent vers le même objet dans le pool de chaînes interne de Java — lorsque le même littéral apparaît à nouveau, Java réutilise l'existant. Ainsi, == renvoie true.
Mais modifions légèrement la façon dont les chaînes sont créées :
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }
L'utilisation de new String() indique à Java de créer un objet complètement distinct à chaque fois — même si le contenu est identique. Puisque == compare les adresses mémoire, et non le texte, il renvoie false.
Règle clé : == ne regarde pas le texte à l'intérieur de la chaîne — il vérifie si les deux variables pointent vers exactement le même objet en mémoire.
equals() — Comparer le contenu réel
Pour comparer le texte réel à l'intérieur de deux chaînes, utilisez .equals(). Cette méthode ignore complètement la mémoire et se concentre uniquement sur les caractères :
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }
Même si order1 et order2 sont des objets distincts en mémoire, .equals() compare leur contenu et retourne true.
Sensibilité à la casse avec equals()
Java est sensible à la casse, donc même une seule différence de majuscule ou minuscule rend les chaînes inégales :
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }
"Latte" et "latte" sont considérées comme des chaînes différentes, donc le résultat est false.
equalsIgnoreCase() — Comparaison sans tenir compte de la casse
Pour comparer des chaînes sans prendre en compte les différences entre majuscules et minuscules, utiliser .equalsIgnoreCase() :
Main.java
12345678910package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }
.equalsIgnoreCase() considère "Latte" et "LATTE" comme identiques et retourne true.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Comparaison des chaînes en Java
La comparaison est un domaine où Java commence à se comporter de manière un peu plus « bas niveau » que prévu. Il semble évident que les chaînes de caractères pourraient être comparées de la même manière que les nombres — en utilisant ==. Après tout, si deux chaînes semblent identiques, pourquoi ne seraient-elles pas égales ?
Le problème avec ==
Si vous utilisez == avec des littéraux de chaîne, cela semble fonctionner correctement au début :
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }
Les deux variables pointent vers le même objet dans le pool de chaînes interne de Java — lorsque le même littéral apparaît à nouveau, Java réutilise l'existant. Ainsi, == renvoie true.
Mais modifions légèrement la façon dont les chaînes sont créées :
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }
L'utilisation de new String() indique à Java de créer un objet complètement distinct à chaque fois — même si le contenu est identique. Puisque == compare les adresses mémoire, et non le texte, il renvoie false.
Règle clé : == ne regarde pas le texte à l'intérieur de la chaîne — il vérifie si les deux variables pointent vers exactement le même objet en mémoire.
equals() — Comparer le contenu réel
Pour comparer le texte réel à l'intérieur de deux chaînes, utilisez .equals(). Cette méthode ignore complètement la mémoire et se concentre uniquement sur les caractères :
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }
Même si order1 et order2 sont des objets distincts en mémoire, .equals() compare leur contenu et retourne true.
Sensibilité à la casse avec equals()
Java est sensible à la casse, donc même une seule différence de majuscule ou minuscule rend les chaînes inégales :
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }
"Latte" et "latte" sont considérées comme des chaînes différentes, donc le résultat est false.
equalsIgnoreCase() — Comparaison sans tenir compte de la casse
Pour comparer des chaînes sans prendre en compte les différences entre majuscules et minuscules, utiliser .equalsIgnoreCase() :
Main.java
12345678910package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }
.equalsIgnoreCase() considère "Latte" et "LATTE" comme identiques et retourne true.
Merci pour vos commentaires !