Hashmap zickt

Carcharoth

Bekanntes Mitglied
Vorab : allen ein gutes Neues Jahr 2021 !

Ich habe einen schwierigen Fall. Ich habe innerhalb eines komplexen Programmes ein scheinbares Fehlverhalten isoliert.

Es gibt eine Hashmap mit Integer-Paare.
Java:
private HashMap<Integer, Integer> tourZugehörigkeit;

Irgendwann im Code, will ich 2 Values dieser Hashmap vergleichen (z.B. für Key 124 und 148).

Tue ich dies direkt wie folgt:
Java:
System.out.println("tourZugehörigkeit.get(124)=" + tourZugehörigkeit.get(124));
System.out.println("tourZugehörigkeit.get(148)=" + tourZugehörigkeit.get(148));
System.out.println("tourZugehörigkeit.get(124)==tourZugehörigkeit.get(148): " + (tourZugehörigkeit.get(124)==tourZugehörigkeit.get(148)));
System.out.println("tourZugehörigkeit.get(124)-tourZugehörigkeit.get(148): " + (tourZugehörigkeit.get(124)-tourZugehörigkeit.get(148)));

kriege ich folgende Konsolen-Ausgaben:
Java:
tourZugehörigkeit.get(124)=146
tourZugehörigkeit.get(148)=146
tourZugehörigkeit.get(124)==tourZugehörigkeit.get(148): false
tourZugehörigkeit.get(124)-tourZugehörigkeit.get(148): 0

Zeile 3 überrascht mich doch sehr !

Mache ich es indirekt über Hilfsvariablen,
Java:
int ai = tourZugehörigkeit.get(124);
int aj = tourZugehörigkeit.get(148);
System.out.println("ai=" + ai);
System.out.println("aj=" + aj);
System.out.println("ai==aj: " + (ai==aj));
System.out.println("ai-aj:" + (ai-aj));

funktioniert es einwandfrei:
Java:
ai=146
aj=146
ai==aj: true
ai-aj:0

PS: es läuft meines Wissens kein anderer Thread welcher die Hashmap während der Ausgabe verändern könnte.

Ich beisse hier etwas auf Granit und wäre dankbar für Denkanstösse.
 
[CODE lang="java" title="Referenzvergleich"]public class ReferenzTest {

public static void main(String[] args) {
Integer a = new Integer(2);
Integer b = new Integer(2);
System.out.println(a == b);
System.out.println(a.intValue() == b.intValue());
}
}[/CODE]
 
Der Datentyp "Integer", ist im Gegensatz zu "int", ein Objekt und Objekte vergleicht man i. d. R. mit equals().
Java:
System.out.println("tourZugehörigkeit.get(124)==tourZugehörigkeit.get(148): " + (tourZugehörigkeit.get(124).equals(tourZugehörigkeit.get(148)));
 
OK, aber ist die folgende Syntax in Ordnung (meineVariable ist ein Objekt)?

Java:
if (meineVariable!=null) {
    ...
}
 
Ja, denn Du willst ja die Referenz prüfen. Du willst wissen, ob die Referenz null ist.
 

Neue Themen


Zurück
Oben