Debugger HashWert

Paddel

Bekanntes Mitglied
Hallo,
ich möchte gerne über eine HashMap itterieren. Die Map ist:
Java:
	HashMap<Ressource, Integer> benötigte_Ressourcen = new HashMap<Ressource, Integer>();
Ich iteriere mit:
Java:
		for(Ressource res : benötigte_Ressourcen.keySet()){
			
			
			sit.getResourcen().put(res, 2);
		}
drüber. Die Hash Funktion in Ressource:
Java:
@Override
	public int hashCode() {
		if(name.equals("Holz"))
		
			return 8;
		
		else return 9;
	}
Dummymässig implementiert.
Im Debugger ist der HashWert im KeySet immer 8. Aber res hat immer den HashWert 0. Egal was ich mach. Kann mir das jemand erklären?
gruß
 
Zuletzt bearbeitet von einem Moderator:
was ist deine Frage? was mit der Anzeige im Debugger nicht stimmt?
du nennst nichtmal das verwendete Tool, im Zweifel ist das aber komplett keine Java-Frage

vorerst nach Vermutung Titel umbenannt und verschoben
 
Die Frage ist wieso mir kein HashCode berechnet wird und dieser immer 0 ist. Wenn ich das Objekt im Debugger untersuche hat es hash=0. Und eigentlich muss er mir als Hash eine 8 oder eine 9 ausgeben. res.getHash() tut das auch.

Meinst du mit Tool Eclipse?
 
mit mir triffst du leider auf einen überzeugten Debugger-Nicht-Nutzer,
so ein Ding ist eine Blackbox, das kann 0, 8, 9 oder 'Guttenberg' anzeigen, hat alles absolut keine Aussage,
solange es stimmt und nachvollziehbar ist, dann ist alles gut, aber Fehler kann man in einer Blackbox nicht erklären

wenn du ein Java-Programm hast mit Java-Objekten und Java-Methoden die Java-int-Werte zurückgeben,
dann gib doch diese Informationen ganz einfach aus:
Java:
System.out.println("Object sowieso hat folgenden Hashwert: "+o.hashCode());
damit haben sich alle Fragen erledigt oder kommt da auch 0 raus, für ein Objekt mit der überschriebenen Methode?
dann muss man genauer agieren, etwa:
Java:
System.out.println("gleich wird Hashwert abgefragt");
System.out.println("Object sowieso hat folgenden Hashwert: "+o.hashCode());

sowie

@Override
    public int hashCode() {
        System.out.println("in hashCode der Klasse ..");
        if(name.equals("Holz")) {        
            System.out.println("werde gleich 8 zurückgeben");
            return 8;
        }
        System.out.println("werde gleich 9 zurückgeben");
        return 9;
    }
anhand des Logs der Ausgaben kann man ungefähr erkennen was so alles passiert,

natürlich sind gewisse Fehlersituationen immer denkbar, etwa noch mehr überschriebene Klassen mit anderen hashCode()-Methoden,
Debugger kann gewiss auch dabei helfen

edit:
die Anzeige im Debugger ist das Klassenattribut hash im String "Holz",
Methoden-Werte werden vielleicht gar nicht angezeigt
 
Zuletzt bearbeitet von einem Moderator:
Alles klar hab den Fehler. In der equals Methode den String mit == statt mit .equals() verglichen. Blöder Fehler.
Danke für deine Hilfe!
 

Zurück
Oben