Java Programming

Comparaison de chaînes de caractères en Java : Guide complet

Spread the love

Java offre plusieurs manières de comparer des chaînes de caractères, chacune ayant ses propres forces et faiblesses. La meilleure méthode dépend de la nécessité d’une comparaison sensible à la casse, de la vérification de l’égalité ou de la détermination de l’ordre lexicographique. Ce guide clarifie les approches les plus courantes.

Table des matières

  1. Utilisation de la méthode compareTo()
  2. L’opérateur ==
  3. La méthode equals()
  4. Sensibilité à la casse et equalsIgnoreCase()
  5. La méthode contentEquals()

1. Comparaison de chaînes de caractères avec compareTo()

La méthode compareTo() offre une comparaison lexicographique. Elle renvoie :

  • 0 : Si les chaînes sont égales.
  • Une valeur négative : Si la chaîne appelante précède la chaîne argument lexicographiquement.
  • Une valeur positive : Si la chaîne appelante suit la chaîne argument lexicographiquement.

Cette comparaison est sensible à la casse ; les lettres majuscules précèdent les lettres minuscules.


String str1 = "apple";
String str2 = "banana";
String str3 = "Apple";

int result1 = str1.compareTo(str2); // result1 sera négatif
int result2 = str1.compareTo(str3); // result2 sera négatif (sensible à la casse)
int result3 = str1.compareTo("apple"); // result3 sera 0

2. L’opérateur ==

L’opérateur == compare les références, et non le contenu des chaînes. Il vérifie si deux variables de chaîne pointent vers le même emplacement mémoire. Ce n’est généralement pas le comportement souhaité pour comparer les valeurs des chaînes.


String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");

System.out.println(str1 == str2); // Souvent vrai grâce à l'internement des chaînes
System.out.println(str1 == str3); // faux (objets différents)

Bien que str1 == str2 renvoie souvent true en raison de l’internement des chaînes de Java, il est peu fiable de s’y fier. Utilisez toujours equals() pour la comparaison de contenu.

3. La méthode equals()

La méthode equals() est l’approche recommandée pour comparer le contenu des chaînes. Elle compare les caractères, sans tenir compte des emplacements mémoire.


String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");

System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true

4. Sensibilité à la casse et equalsIgnoreCase()

equals() est sensible à la casse. « hello » et « Hello » sont considérés comme différents. Pour les comparaisons sans tenir compte de la casse, utilisez equalsIgnoreCase().


String str1 = "hello";
String str2 = "Hello";

System.out.println(str1.equals(str2)); // false
System.out.println(str1.equalsIgnoreCase(str2)); // true

5. La méthode contentEquals()

contentEquals() est similaire à equals(), mais elle permet de comparer une chaîne avec d’autres objets CharSequence (comme StringBuffer ou StringBuilder).


String str1 = "hello";
StringBuffer str2 = new StringBuffer("hello");

System.out.println(str1.contentEquals(str2)); // true

Cela offre de la flexibilité, mais pour des comparaisons simples de chaîne à chaîne, equals() est préférable pour la lisibilité.

En résumé, choisissez la méthode appropriée en fonction de vos besoins : compareTo() pour l’ordre lexicographique, equals() pour l’égalité de contenu sensible à la casse, equalsIgnoreCase() pour l’égalité insensible à la casse, et contentEquals() pour comparer des chaînes avec d’autres objets CharSequence. Évitez d’utiliser == pour comparer le contenu des chaînes.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *