Почему .hashcode() печатает другое значение, если оно было напечатано один раз раньшеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему .hashcode() печатает другое значение, если оно было напечатано один раз раньше

Сообщение Anonymous »

Может ли кто-нибудь объяснить следующее поведение .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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему .hashcode() печатает другое значение, если оно было напечатано один раз раньше
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Почему .hashcode() печатает другое значение, если оно было напечатано один раз раньше [дубликат]
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Каково значение «сильно случается раньше» по сравнению с «(просто) происходит раньше»?
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Получить значение строки Python, как напечатано "print ()"
    Anonymous » » в форуме Python
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Получить значение строки Python, как напечатано "print ()"
    Anonymous » » в форуме Python
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»