Comparaison des chaînes et des chaînes https://www.javadrive.jp/start/string/index4.html
[Introduction à Java] Comment comparer des chaînes ("==" et "equals") https://www.sejuku.net/blog/14621
int num = 10
if (num == 10) {
System.out.println("num est 10.");
} else {
System.out.println("num n'est pas 10.");
}
Dans cette formule, 10 est stocké dans la variable num, donc le résultat du traitement est
num est 10.
String str1 = "hoge"
String str2 = "hoge"
if (str1 == str2) {
System.out.println("str1 et str2 sont identiques.");
} else {
System.out.println("str1 et str2 sont différents.");
}
Dans cette formule, la variable str1 et la variable str2 stockent la même chaîne de caractères hoge, j'ai donc pensé que le résultat du traitement serait "str1 et str2 sont les mêmes".
str1 et str2 sont différents.
.. .. .. !? Hoge!? Pourquoi!? Je suis resté coincé dans un pot ici et je me suis retiré environ 300 fois.
Même si vous comparez avec "==", il sera traité comme une chaîne de caractères différente. C'est ce qu'on appelle une référence Java
Lorsqu'une chaîne de caractères est générée, un emplacement (zone) pour stocker la chaîne de caractères est sécurisé dans la mémoire. Hoge tient la «place» réservée
En d'autres termes, la valeur n'est pas stockée dans une variable, mais le mécanisme est tel que lorsque vous vous souvenez de l'emplacement et utilisez hoge, vous suivez cet emplacement et extrayez la valeur.
En raison de ce mécanisme de référence, lors de la comparaison avec "==", il ne s'agit pas de savoir si les valeurs des chaînes sont les mêmes, mais si les emplacements où les chaînes sont stockées dans la mémoire sont les mêmes.
Renvoie «true» si stocké dans la même zone de mémoire, sinon «false» Dans la formule précédente, str1 et str2 sont stockés dans différentes zones de mémoire, ils renvoient donc «false».
String str1 = "hoge"
String str2 = "hoge"
if (str1.equals(str2)) {
System.out.println("str1 et str2 sont identiques.");
} else {
System.out.println("str1 et str2 sont différents.");
}
Résultat du traitement
str1 et str2 sont identiques.
Le résultat attendu est renvoyé.
Au fait, si vous écrivez en ruby, le même résultat sera renvoyé même avec "=="
str1 = "hoge"
str2 = "hoge"
if str1 == str2 then
puts "str1 et str2 sont identiques."
else
puts "str1 et str2 sont différents."
end
# =>str1 et str2 sont identiques.
Lorsque vous utilisez ruby ou JavaScript, le "type numérique" et le "type de chaîne" peuvent être comparés en utilisant "==", j'ai donc écrit le programme en Java sans aucun doute, mais Java est différent.
J'ai vérifié les erreurs grammaticales de sorte qu'il y avait un trou dans l'écran, mais soyez prudent car si vous ne connaissez pas «référence», cela prendra plus de temps pour moi
Recommended Posts