[Java] Vorsichtsmaßnahmen beim Vergleichen von Zeichenfolgen mit Zeichenfolgen

Schlussfolgerung: Verwenden Sie equals (), wenn Sie Zeichenfolgen vergleichen, die in Variablen in Java gespeichert sind.

Was willst du tun

Referenz

Vergleich von Strings und Strings https://www.javadrive.jp/start/string/index4.html

[Einführung in Java] So vergleichen Sie Zeichenfolgen ("==" und "gleich") https://www.sejuku.net/blog/14621

Beim Ersetzen von Variablen durch numerische Werte und beim Vergleichen

int num = 10

if (num == 10) {
 System.out.println("num ist 10.");
} else {
 System.out.println("num ist nicht 10.");
}

In dieser Formel wird 10 in der Variablen num gespeichert, so dass das Verarbeitungsergebnis ist

num ist 10.

Beim Zuweisen eines Zeichenfolgentyps zu einer Variablen und beim Vergleichen

String str1 = "hoge"
String str2 = "hoge"

if (str1 == str2) {
 System.out.println("str1 und str2 sind gleich.");
} else {
 System.out.println("str1 und str2 sind unterschiedlich.");
}

In dieser Formel speichern die Variablen str1 und die Variable str2 das gleiche Zeichenfolgen-Hoge, daher dachte ich, dass das Verarbeitungsergebnis "str1 und str2 sind gleich" wäre.

str1 und str2 sind unterschiedlich.

.. .. .. !? Hoge !? Warum!? Ich bin hier in einem Topf stecken geblieben und habe ungefähr 300 Mal debacked.

Methode "==", um zu vergleichen, ob die Speicherorte, an denen die Zeichenfolgen gespeichert sind, identisch sind

Selbst wenn Sie mit "==" vergleichen, wird es als eine andere Zeichenfolge behandelt. Dies wird als Java-Referenz bezeichnet

Wenn eine Zeichenfolge generiert wird, wird ein Ort (Bereich) zum Speichern der Zeichenfolge im Speicher gesichert. Hoge hält den reservierten "Platz"

Mit anderen Worten, der Wert wird nicht in einer Variablen gespeichert, aber der Mechanismus ist so, dass Sie, wenn Sie sich an den Ort erinnern und hoge verwenden, diesem Ort folgen und den Wert herausziehen.

Aufgrund dieses Referenzmechanismus ist es beim Vergleich mit "==" nicht wichtig, ob die Werte der Zeichenfolgen gleich sind, sondern ob die Speicherorte der Zeichenfolgen im Speicher gleich sind.

Gibt "true" zurück, wenn es im selben Speicherbereich gespeichert ist, andernfalls "false" In der vorherigen Formel werden str1 und str2 in verschiedenen Speicherbereichen gespeichert, sodass sie "false" zurückgeben.

Vergleichen Sie Zeichenfolgen mit der Methode equals ()

String str1 = "hoge"
String str2 = "hoge"

if (str1.equals(str2)) {
 System.out.println("str1 und str2 sind gleich.");
} else {
 System.out.println("str1 und str2 sind unterschiedlich.");
}

Verarbeitungsergebnis

str1 und str2 sind gleich.

Das erwartete Ergebnis wird zurückgegeben.

Übrigens, wenn Sie in Ruby schreiben, wird das gleiche Ergebnis auch mit "==" zurückgegeben.

str1 = "hoge"
str2 = "hoge"

if str1 == str2  then
 puts "str1 und str2 sind gleich."
else
 puts "str1 und str2 sind unterschiedlich."
end

# =>str1 und str2 sind gleich.

Zusammenfassung

Bei Verwendung von Ruby oder JavaScript können sowohl der numerische Typ als auch der Zeichenfolgentyp mit "==" verglichen werden. Daher habe ich das Programm ohne Zweifel in Java geschrieben, aber Java ist anders.

Ich habe nach Grammatikfehlern gesucht, damit der Bildschirm ein Loch aufweist. Seien Sie jedoch vorsichtig, denn wenn Sie keine "Referenz" kennen, dauert es länger

Ende

Recommended Posts

[Java] Vorsichtsmaßnahmen beim Vergleichen von Zeichenfolgen mit Zeichenfolgen
Sortieren Sie Zeichenfolgen als charakteristische Funktion mit Java
[Schienen] Vorsichtsmaßnahmen beim Vergleich von Datum und Uhrzeit mit DateTime
Fehler beim Spielen mit Java
Vorsichtsmaßnahmen beim Ersetzen von Anführungszeichen durch gsub
[Java] Entfernen Sie Leerzeichen in Zeichenfolgen
Vorsichtsmaßnahmen beim Erstellen von PostgreSQL mit Docker-Compose
Hinweise zur HTTP-Kommunikation mit Java (OkHttp)
Beim Aufrufen der API mit Java tritt eine javax.net.ssl.SSLHandshakeException auf
Vorsichtsmaßnahmen bei der Migration von VB6.0 auf JAVA
[java] Zusammenfassung des Umgangs mit Zeichenketten
Java-Strings bearbeiten
Geben Sie ClassPath an, wenn Sie jupyter + Java mit WSL verwenden
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Java-Zeichencode
[Java] Berücksichtigung beim Umgang mit negativen Binärzahlen mit Integer.parseInt ()
[Java] Sortiertipps beim Mischen von Zeichenfolgen und Zahlen
Beachten Sie das Multithread-Problem, wenn Sie mit Java Servlet arbeiten
Informationen zur Konvertierung von Zeichenfolgen in Java in voller Breite und halber Breite
[Java] Umgang mit Zeichenketten (String-Klasse und StringBuilder-Klasse)
Installieren Sie Java mit Homebrew
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Bequemer Download mit JAVA
Schalten Sie Java mit direnv
Java-Download mit Ansible
Lass uns mit Java kratzen! !!
Erstellen Sie Java mit Wercker
Endian-Konvertierung mit JAVA
[Java] Vergleichsmethode für Zeichenketten und Vergleichsmethode mit regulären Ausdrücken
Geben Sie beim Erstellen mit Maven den Zeichencode der Quelle an
Ersteinstellungsmethode bei der Erstellung von Alexa Skill mit JAVA (Cloud 9)
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Vorsichtsmaßnahmen bei der Verwendung von Mockito.anyString als Argument beim Verspotten mit Mockito
[Einführung in Java] Umgang mit Zeichenfolgen (String-Klasse, StringBuilder-Klasse)
[Java] UTF-8 (mit Stückliste) wird in 0xFFFD (REPLACEMENT CHARACTER) konvertiert.
Vorsichtsmaßnahmen beim Schreiben eines Programms: Teil 3
Vorsichtsmaßnahmen beim Ersetzen von Anführungszeichen durch gsub
Vorsichtsmaßnahmen beim Erstellen von PostgreSQL mit Docker-Compose
[Java] Vorsichtsmaßnahmen beim Vergleichen von Zeichenfolgen mit Zeichenfolgen