Может ли кто-нибудь объяснить следующее поведение .hashcode().
при работе с двумя классами ниже я получаю разные значения для вызовов .hashcode().
Значение хэш-кода моей переменной (contact3) в Main меняется в зависимости от того, вызываю ли я хеш-код() в mergeContactData. Это означает, что если я закомментирую вызов хэш-кода в mergeContactData, хэш-код для contact3 в Main будет отличаться от того, если бы я его не закомментировал.
Чего я не понимаю, так это почему это значение меняется, если я просто печатаю хеш-код.
public class Main {
public static void main(String[] args) {
Contact contact = new Contact("Gustavo", "xxx", 5555555555L);
Contact contact2 = new Contact("Gustavo", "xxx", 5555555555L);
Contact contact3 = contact.mergeContactData(contact2);
System.out.println("Hashcode for contact3: " + contact3.hashCode());
}
}
import java.util.HashSet;
import java.util.Set;
public class Contact {
private String name;
private Set emails = new HashSet();
private Set phones = new HashSet();
public Contact(String name) {
this(name, null, 0);
}
public Contact(String name, String email) {
this(name, email, 0);
}
public Contact(String name, long phone) {
this(name, null, phone);
}
public Contact(String name, String email, long phone) {
this.name = name;
if (email != null) {
this.emails.add((email));
}
if (phone < 1000000000) {
System.out.println("Invalid Phone Number");
return;
}
String phoneNumber = "";
phoneNumber += "(" +
String.valueOf(phone / 10000000);
phone = phone % 10000000;
phoneNumber += ")" + String.valueOf(phone / 10000);
phone = phone % 10000;
phoneNumber += "-" + String.valueOf(phone);
this.phones.add(phoneNumber);
}
public String getName() {
return this.name;
}
public Contact mergeContactData(Contact contact) {
if (this.name.equals(contact.name)) {
Contact newContact = new Contact(this.name);
newContact.emails.addAll(this.emails);
newContact.phones.addAll(this.phones);
newContact.emails.addAll(contact.emails);
System.out.println(newContact.hashCode());
contact.phones.forEach(s -> newContact.phones.add(s));
return newContact;
} else {
System.out.println("Not the same contact name");
return this;
}
}
@Override
public String toString() {
return this.name + " -> emails: " + this.emails + " Phone: " + this.phones;
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... nce-before
Почему .hashcode() печатает другое значение, если оно было напечатано один раз раньше [дубликат] ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему .hashcode() печатает другое значение, если оно было напечатано один раз раньше
Anonymous » » в форуме JAVA - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему .hashcode() печатает другое значение, если оно было напечатано один раз раньше
Anonymous » » в форуме JAVA - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Каково значение «сильно случается раньше» по сравнению с «(просто) происходит раньше»?
Anonymous » » в форуме C++ - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему вызов hashcode() меняет значение хэш-кода моей переменной? [дубликат]
Anonymous » » в форуме JAVA - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-