Здесь Equals_to_operator
является классом и имеет параметризованный конструктор public Equals_to_operator(int dd, int mm, int yy)
. e
и f
- два объекта, которые вызывают параметризованный конструктор с тем же аргументом. Я обогнал hashCode
и сделал и хэш-код объектов. Eventhough, если сделать hashcode таким же (расположение памяти объекта таким же), он дает Output: not equalsКогда мы делаем хэш-код из 2 объектов, указывающих на один адрес, почему это временно?
Я хочу выполнить то же самое, сделав hashcode таким же, где я иду не так?
public class Equals_to_operator {
private int dd,mm,yy;
public Equals_to_operator(int dd, int mm, int yy) {
this.dd = dd;
this.mm = mm;
this.yy = yy;
}
@Override
public String toString() {
return "Equals_to_operator [dd=" + dd + ", mm=" + mm + ", yy=" + yy + "]";
}
public int hashCode() {
return 1;
}
public static void main(String[] args) {
Equals_to_operator e=new Equals_to_operator(7, 1, 2016);
System.out.println(e+"\n"+e.hashCode());
Equals_to_operator f=new Equals_to_operator(7, 1, 2016);
System.out.println(f+"\n"+f.hashCode());
if (e==f)
System.out.println("equals");
else
System.out.println("not equals");
}
Вы создаете два разных объекта, поэтому они не будут совпадать с оператором ==. Изменение результата из метода hashCode не влияет на «местоположение памяти» объекта. –
, когда мы делаем hashCode двух объектов одинаковыми, не будут ли оба объекта указывать на то же место памяти? –
Возвращаемое значение hashCode() не является адресом памяти. – synchronizer