Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Comparaison des chaînes en Java | Chaînes de Caractères
Introduction à Java

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

Main.java

1234567891011
package 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

Main.java

1234567891011
package 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

Main.java

1234567891011
package 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

Main.java

1234567891011
package 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

Main.java

12345678910
package 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.

question mark

Que compare l'opérateur == lorsqu'il est utilisé avec des chaînes de caractères en Java ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 5

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

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

Main.java

1234567891011
package 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

Main.java

1234567891011
package 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

Main.java

1234567891011
package 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

Main.java

1234567891011
package 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

Main.java

12345678910
package 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.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 5
some-alt