Quelle est la comparaison entre Equals et ==?
1. TEM booléen = a == b;
Tout d'abord, == la comparaison est certainement l'adresse. Du point de vue de la pile, c'est-à-dire == la comparaison est le contenu de la pile. Parce que la pile est utilisée pour stocker les valeurs littérales des variables automatiques dans les huit types de base en Java (les variables automatiques sont des variables définies sous la forme d'int a = 1;). S'il s'agit d'une valeur de comparaison de variable automatique, il est définitivement utilisé pour le comparer avec ==, car equals () est une méthode, il doit donc être appelé par un objet à utiliser à titre de comparaison. Les variables automatiques ne sont ni des cas de classes ni des références de classes, donc la méthode equals () ne peut pas être utilisée.
2.Boolean TEM = A.Equals ("B");
La méthode equals () est généralement utilisée pour comparer le contenu d'un objet, mais dans certains cas, il compare également les adresses de deux objets.
Suivant
Écrire un programme de test
package com; import java.util.date; public class test {public static void main (String [] args) {Integer Integer1 = new Integer (1); Integer Integer2 = Nouveau entier (1); String str1 = new String ("123"); String str2 = new String ("123"); DATE DATE1 = NOUVEAU DATE (); DATE DATE2 = NOUVEAU DATE (); Double double1 = nouveau double ("1.0"); Double double2 = nouveau double ("1.0"); Boolean TEM1 = New Boolean (true); Boolean TEM2 = New Boolean (true); Objet objet1 = nouveau objet (); Objet objet2 = nouveau objet (); System.out.println ("---- objet -------"); System.out.println (object1.equals (object2)); System.out.println (objet1 == Object2); System.out.println (object1.equals (object1)); System.out.println (objet1 == Object1); System.out.println ("-----------"); System.out.println (TEM1.Equals (TEM2)); System.out.println (TEM1 == TEM2); System.out.println ("--- Double --------"); System.out.println (double1.equals (double2)); System.out.println (double1 == double2); System.out.println ("---- Integer -------"); System.out.println (Integer1.equals (Integer2)); System.out.println (Integer1 == Integer2); System.out.println ("-----------"); System.out.println (str1.equals (str2)); System.out.println (str1 == str2); System.out.println ("-----------"); System.out.println ("-----------"); System.out.println (str1 == str2); System.out.println ("-----------"); System.out.println (date1.equals (date2)); System.out.println (date1 == Date2); }}résultat:
---Objet-----
FAUX
FAUX
vrai
vrai
--- booléen -----
vrai
FAUX
---Double-----
vrai
FAUX
---Entier-----
vrai
FAUX
---Chaîne-----
vrai
FAUX
---Date-----
vrai
FAUX
Premièrement, lorsque les deux objets comparés sont les mêmes, les résultats de == et equals () sont vrais, et lorsque les deux objets sont différents, ils sont renvoyés faux. Ainsi, lorsque == et que les égaux sont utilisés pour comparer les objets, ils comparent l'adresse de l'objet, mais en fait, l'essence est la même. Voici le code de la méthode equals () dans la classe d'objets:
public booléen est égal (objet obj) {return (this == obj); }Pour Boolean, Double (Float), Interger (Shot, Long), String et Date, j'ai également trouvé leurs codes source. Ci-dessous, j'ai publié les codes source de la méthode equals () dans Boolean, Double, Interger, String et Date. À l'heure actuelle, la méthode equals () a été réécrite car ces classes sont héritées de la classe d'objets.
Booléen:
Public Boolean est égal (objet obj) {if (obj instanceof boolean) {return value == ((boolean) obj) .booleanValue (); } return false; }Double:
public booléen est égal (objet obj) {return (obj instanceof double) && (DoubleTolongBits (((double) obj) .value) == DoubleTolongBits (valeur)); }Interger:
public booléen est égal (objet obj) {if (obj instanceof Integer) {return value == ((Integer) obj) .intValue (); } return false; } Chaîne:
public booléen égaux (objet anobject) {if (this == anObject) {return true; } if (anobject instanceof string) {String anotherstring = (string) anObject; int n = value.length; if (n == anotherstring.value.length) {char v1 [] = valeur; char v2 [] = anotherstring.value; int i = 0; while (n--! = 0) {if (v1 [i]! = v2 [i]) return false; i ++; } return true; }} return false; }Date:
Public Boolean est égal (objet obj) {return obj instanceof date && gettime () == ((date) obj) .getTime (); }En d'autres termes, à ces moments, la méthode equals () de la classe d'objets est réécrite pour comparer le contenu réel de deux objets et non plus l'adresse. Bien sûr, ce n'est certainement pas seulement cela. Voici quelques cas courants où les classes natives de Java réécrivent la méthode equals () de la classe d'objets.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!