Just curious about how does "==" work in Java?
I create two classes ClassObject1
and ClassObject2
, both implement interface I_Class
Inside ClassObject1
and ClassObject2
, I override the hashCode()
and equals()
functions, to make sure these two functions will return exactly same value for both these two classes.
public interface I_Class {
public String getName();
}
public class ClassObject1 implements I_Class{
private String name="";
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ClassObject1 other = (ClassObject1) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String getName() {
return this.name;
}
}
public class ClassObject2 implements I_Class{
private String name="";
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ClassObject2 other = (ClassObject2) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String getName() {
return this.name;
}
}
I assume in this case
I_Class obj1 = new ClassObject1();
I_Class obj2 = new ClassObject2();
System.out.println(obj1 == obj2); // I assume here will write true
"==" compares the memory address, doesn't it?