Organisation de la comparaison des valeurs de type String.
== -Pour les types primitifs, comparez les valeurs. -Dans le type d'objet, les valeurs de référence des objets sont comparées pour déterminer si les objets sont identiques.
equals() Il ne peut être utilisé que dans le type d'objet et le contenu des objets est comparé pour déterminer si les objets ont la même valeur.
En d'autres termes, le type Strng est un objet de type référence, vous pouvez donc utiliser equals.
StringSample.java
String str1 = "A";
String str2 = "A";
String str3 = new String("A");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
if(str1 == str2) {
System.out.println("TRUE");
}else {
System.out.println("FALSE");
}
if(str1 == str3) {
System.out.println("TRUE");
}else {
System.out.println("FALSE");
}
100
100
TRUE
C'est devenu VRAI. Est-il correct de comparer le type String avec ==?
Le type String crée une valeur dans la zone du tas lors de son initialisation, mais il semble qu'elle sera réutilisée si la même valeur est utilisée.
Pour économiser de la mémoire, utilisez la zone (adresse = 100) où la valeur «A» correspond sans nouveau.
Lorsque vous réécrivez la valeur de la variable, la valeur source de référence (adresse = 100) n'est pas modifiée, mais la destination de référence est modifiée en créant la nouvelle zone de "B". (Changement de l'adresse de référence de 100 à 200)
String.class
private final char value[];
public boolean equals(Object 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[] = value; //Valeur de son propre objet
char v2[] = anotherString.value; //Valeur de l'objet comparé
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i]) //Décomposer la chaîne en caractère et comparer les valeurs
return false;
i++;
}
return true;
}
}
return false;
}
L'objet String est décomposé en char [] et les valeurs sont comparées une par une.
Les objets chaîne peuvent avoir la même valeur de référence (adresse de référence) pour différentes variables locales s'ils ont la même valeur pour économiser de la mémoire, mais cela n'est pas garanti et doit être comparé à des égaux.