Comparer deux String en java - equals() et equalsIgnoreCase()

La première chose qui vient en tête est de faire la comparaison avec "==" mais c'est totalement faux. Quand j'ai commencé à programmer avec Java j'ai comparé deux chaines avec "==" qui teste l'égalité des objets mais pas entre deux chaines deux caractères. Contrairement au C++,  Les concepteurs de Java ont crée des méthodes dans la classe String pour simplifier le langage puisqu'il est orienté objet.

Comparaison de String avec la méthode equals

La méthode equals() de la classe String teste l'égalité des valeurs en java ou des contenus de variables et retourne true si les deux chaines de caractères contiennent les mêmes caractères. Voici un exemple:

String s1="str";
String s2="str";
if(s1.equals(s2))
System.out.println("Les deux String sont égaux");
equals() est sensible à la case(minuscule ou majuscule):

String s1="str";
String s2="STR";
if(s1.equals(s2))
System.out.println("Les deux String sont égaux");
Dans ce cas, elle retourne false.

Ignorer les majuscules avec la méthode equalsIgnoreCase()

La méthode equalsIgnoreCase() évite de passer un String de minuscule en majuscule et vis-vers-ça et le comparer avec equals(), Java propose une méthode equalsIgnoreCase() qui convertie les caractères en minuscule et compare les deux chaines de caractères.

String s1="str";
String s2="STR";
if(s1.equalsIgnoreCase(s2))
System.out.println("Sensibilité à la case ignorée. Les deux String sont égaux");

Comparaison de taille

La classe String dispose de la méthode length() qui renvoie la longueur de la chaîne de caractères:

if("chaine1".length()=="chaine2".length())
System.out.println("chaine1 et chaine2 égaux en taille");
else if("chaine1".length()>"chaine2".length())
System.out.println("chaine1 est plus longue");
else
System.out.println("chaine2 est plus longue");

Quelle est la différence entre equals et "=="

La méthode equals() teste l'égalité des valeurs.

new String("test").equals(new String("test"));//-->true
L'opérateur "==" teste l'égalité des objets, voici une série d'erreurs à éviter:

String s1="essai";
String s2="essai";

//ceux sont le même objet
s1==s2; // -->false

//ceux ne sont pas le même objet
s1 == "test"; // -->false

//Ils référencent le même objet
"test" == "test"; // -->true

//la concaténation est considéré comme un seul objet
"test" == "tes"+"t"; // -->true

//la méthode substring() génère un nouveau objet
"test" == "1test".substring(1); // -->false

//la méthode replace() génère un nouveau objet
"test" == "Test".replace("T", "t"); // -->false
La concaténation retourne true parce qu'elle est appelée pendant la compilation, contrairement à substring() et replace() qui sont appelées lors de l’exécution et un nouveau objet va être créé qui n'égale pas à l'autre coté de l'équation.