1. Comparer des chaînes
Tout cela est bien et bon. Mais vous pouvez voir que les chaînes s1
et s2
sont en fait les mêmes, ce qui signifie qu'elles contiennent le même texte. Lorsque vous comparez des chaînes, comment indiquez-vous au programme de ne pas regarder les adresses des String
objets, mais leur contenu ?
Pour nous aider avec cela, String
la classe de Java a la equals
méthode. L'appel ressemble à ceci:
string1.equals(string2)
Cette méthode renvoie true
si les chaînes sont identiques et false
si elles ne sont pas identiques.
Exemple:
Code | Note |
---|---|
|
|
Plus d'exemples :
Code | Explication |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Comparaison de chaînes insensible à la casse
Dans le dernier exemple, vous avez vu que la comparaison donne . En effet, les cordes ne sont pas égales. Mais..."Hello".equals("HELLO")
false
De toute évidence, les cordes ne sont pas égales. Cela dit, leur contenu a les mêmes lettres et ne diffère que par la casse des lettres. Existe-t-il un moyen de les comparer et de ne pas tenir compte de la casse des lettres ? C'est-à-dire, donc ça donne ?"Hello".equals("HELLO")
true
Et la réponse à cette question est oui. En Java, le String
type a une autre méthode spéciale : equalsIgnoreCase
. L'appel ressemble à ceci:
string1.equalsIgnoreCase(string2)
Le nom de la méthode se traduit approximativement par compare but ignore case . Les lettres du nom de la méthode comprennent deux lignes verticales : la première est une minuscule L
et la seconde une majuscule i
. Ne laissez pas cela vous confondre.
Exemple:
Code | Note |
---|---|
|
|
3. Exemple de comparaison de chaînes
Donnons juste un exemple simple : supposons que vous deviez saisir deux lignes à partir du clavier et déterminer si elles sont identiques. Voici à quoi ressemblera le code :
Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);
4. Une nuance intéressante de comparaison de cordes
Il y a une nuance importante dont vous devez être conscient.
Si le compilateur Java trouve plusieurs chaînes identiques dans votre code (en particulier dans votre code), il ne créera qu'un seul objet pour elles afin d'économiser de la mémoire.
String text = "This is a very important message";
String message = "This is a very important message";
Et voici ce que la mémoire contiendra en conséquence :

Et si vous comparez text == message
ici, alors vous obtenez true
. Ne vous étonnez donc pas.
Si pour une raison quelconque vous avez vraiment besoin que les références soient différentes, alors vous pouvez écrire ceci :
String text = "This is a very important message";
String message = new String ("This is a very important message");
Ou ca:
String text = "This is a very important message";
String message = new String (text);
Dans ces deux cas, les variables text
et message
pointent vers des objets différents contenant le même texte.
GO TO FULL VERSION