instanceof

tiger360
instanceof

salut tout le monde
j aimerai avoir quelques explications a propos de l operateur instanceof notamment avec un exemple : la classe Equals ,si possible

merci d anvance
Cordialement!

fredericmazue

instanceof te permet de savoir si un objet est une instance d'une classe ou d'une interface donnée, y compris ancêtre, mais pas dérivée.

Exemple dans lequel instanceof renvoie true partout sauf là où c'est signalé:

class MaClass {
    
}

class MaSousClass extends MaClass {
    
}

public class Demo {
    public static void main(String[] args) {
	String s = "Tiger360";
	
	boolean b = s
		instanceof String;
	System.out.println(b);
	MaClass mc = new MaClass();
	MaSousClass msc = new MaSousClass();
	b = mc instanceof MaClass;
	System.out.println(b);
	b = mc instanceof MaSousClass;
	System.out.println(b); // false ici car MaSousClass dérive de MaClass
	b = msc instanceof MaSousClass;
	System.out.println(b);
	b = msc instanceof MaClass;
	System.out.println(b);
    }
}

Pour ta demande d'un exemple avec la classe Equals, je ne vois pas ce que tu veux. La classe Equals n'existe pas à pas connaissance.
Tu dois confondre avec la méthode equals de Object, dont le rôle est différent et expliqué dans la Javadoc de java.lang.Object.

tiger360

merci bcp
juste je me suis gouré je voulais parler de la methode equals

fredericmazue

La méthode équals permet de tester l'égalité entre deux objets.
Par défaut elle vérifie l'égalité des références. Ce qui revient à utiliser l'opérateur == finalement. Si les références sont égales, les objets sont les mêmes et donc sont considérés égaux.

Dans certains cas la méthode est rédéfine. Pour la classe String notamment. Si elle ne l'était *PAS* tu aurais:
String s1 = "tiger360";
String s2 = "tiger360";
s1 == s2; ===> false
s1.equals(s2); ===> false

*MAIS* et heureusement, dans le cas d'une chaîne, la méthode equals de objets est redéfinie et on a un comportement conforme à ce que l'on attend:

String s1 = "tiger360";
String s2 = "tiger360";
s1 == s2; ===> false car ce sont deux objets différents
s1.equals(s2); ===> true car le contenu des chaînes est le même :)

En résumé, si tu écris toi même une classe et que tu as besoin de tester l'égalité, tu redéfinis la methode equals et dedans tu mets les tests dont tu as besoin.