| 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.
| Cette section vous intéresse ? Abonnez-vous ! |
|