Dans cette fiche... |
Difficulté : ![]() |
Résultat |
Un piège classique pour les débutants en Java : la comparaison de 2 chaînes de caractères.
|
|
// -------------------------------------------------- // COMPARAISON DES CHAINES DE CARACTERES // --------------------------------------------------
import java.applet.*; import java.awt.*;
public class Compar extends Applet { String s1, s2, s3, s4;
public void init() { // Définir la couleur de fond de l'applet setBackground(Color.black)
s1 = new String("Loi du frisbee"); s2 = new String("Plus le disque ira loin,"); s3 = new String("moins ce sera dans la direction voulue."); s4 = new String("Plus le disque ira loin,"); }
// La méthode paint() est appelée à chaque fois que l'applet // est dessinée à l'écran. public void paint(Graphics g) { // Affichage des chaînes s1, s2 et s3, juste pour faire joli. g.setColor(Color.yellow); g.drawString("s1 = "+s1, 10, 15); g.setColor(Color.orange); g.drawString("s2 = "+s2, 10, 25); g.drawString("s3 = "+s3, 10, 35); g.drawString("s4 = "+s4, 10, 45);
g.setColor(Color.white); // Tester l'égalité de 2 chaînes (mauvaise méthode) if (s2 == s4) g.drawString("Les chaînes s2 et s4 sont égales.", 10, 60); else g.drawString("Les chaînes s2 et s4 sont différentes.", 10, 60);
// Tester l'égalité de 2 chaînes (bonne méthode) if (s2.equals(s4)) g.drawString("Les chaînes s2 et s4 sont égales.", 10, 70); else g.drawString("Les chaînes s2 et s4 sont différentes.", 10, 70); } }
Seules les nouveautés par rapport aux listings précédents sont commentées ici.
// Tester l'égalité de 2 chaînes (mauvaise méthode) if (s2 == s4) g.drawString("Les chaînes s2 et s4 sont égales.", 10, 60); else g.drawString("Les chaînes s2 et s4 sont différentes.", 10, 60); |
Lorsqu'on fait une comparaison de 2 chaînes, on est tenté d'utiliser le
double-égal (==), comme ci-dessus. Cet == fonctionne sur les types simples (int par exemple), mais pas sur les objets. Dans l'exemple ci-dessus, le programme affiche : Les chaînes s2 et s4 sont différentes même si elles contiennent la même chose. Il s'agit de textes
identiques, mais d'objets différents. |
// Tester l'égalité de 2 chaînes (bonne méthode) if (s2.equals(s4)) g.drawString("Les chaînes s2 et s4 sont égales.", 10, 70); else g.drawString("Les chaînes s2 et s4 sont différentes.", 10, 70); |
La bonne méthode consiste à utiliser la méthode equals()
de l'une des chaînes. s2.equals(s4) renvoie true (vrai) ou false (faux) selon que les 2 objets String contiennent ou non la même chose. A noter que s2.equals(s4) donne le même résultat que s4.equals(s2). Ca rassure, non ? Autre variante :
A la fin de ce programme, x vaut false, à cause du B de
Bonjour.
Dans ce cas, x vaut true. |
Voici le code qui a été utilisé dans cette page HTML pour faire apparaître l'applet :
<applet code="Compar.class" width=250 height=90> Votre navigateur n'est pas compatible Java ! </applet>
Pour plus de précisions sur l'intégration d'une applet, cliquez ici.