Может ли кто-нибудь объяснить следующее поведение .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
Программисты JAVA общаются здесь
1730329301
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;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79143059/why-does-hashcode-print-different-value-if-printed-once-before[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия