Why if comparison doesn’t work in Java
I create a hash table in Java
This is part of my code
while (table[pos]!=null) { if (table[pos]==key) { System.out.println("SEARCH "+key+" at INDEX "+home); return; } else {pos=h(home+p(i)); i++; } } System.out.println("Failed to find "+key+"."); return; }
Even if the table [POS] and key are the same, it doesn't work! But I add a very simple assignment variable to another variable It works! I don't know why I want to know it XD
while (table[pos]!=null) { int x = table[pos]; if (x==key) { System.out.println("SEARCH "+key+" at INDEX "+home); return; } else {pos=h(home+p(i)); i++; } } System.out.println("Failed to find "+key+"."); return; }
Solution
Well, if both table [POS] and key are integers (and table [POS] must be of reference type, because you compare it with null in the while statement), they should be compared with equals, not = = because two different integer objects may have the same int value
When table [POS] is assigned to the int variable x, it cancels the box to the original value
Now, when you compare int x with the integer key, the key will also unload int, and the int comparison applies to = =
This can be demonstrated by the following short examples:
Integer i1 = 300; Integer i2 = 300; System.out.println (i1 == i2); int i3 = i1; System.out.println (i3 == i2);
Which output:
false true
The code is as follows:
while (table[pos] != null) { if (table[pos].equals(key)) { System.out.println("SEARCH "+key+" at INDEX "+home); return; } else { pos = h(home + p(i)); i++; } } System.out.println("Failed to find "+key+".");