Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hashcode 
V
    Опции темы
Tony
Дата 12.12.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Код

        SSS sss = new SSS();
        System.out.println(sss.toString());
        System.out.println(sss.hashCode());


Как я понимаю, toString() - выведет я4ейку памяти в каторой находится объект. А hashCode() int hash для этого объекта. Парав ли я?

Это сообщение отредактировал(а) Tony - 12.12.2006, 13:23


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
Shurr
Дата 12.12.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 5
Всего: 7



The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of: 

 getClass().getName() + '@' + Integer.toHexString(hashCode())

http://java.sun.com/j2se/1.4.2/docs/api/ja...html#toString()

Так что в случае если метод toString()  в объекте не переопределен - то выводит он имя класса объекта + '@' + хэш в шестнадцатеричном представлении.
PM MAIL   Вверх
Tony
Дата 12.12.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Код

getClass().getName() + '@' + Integer.toHexString(hashCode())


И так понятно.  sss - хранит ссылку на объект. Эта ссылка генерится:
Код

getClass().getName() + '@' + Integer.toHexString(hashCode())

Тоесть сам hash code явлсяется аддресом я4ейки памяти?
Просто хо4у детально разобратся.

Это сообщение отредактировал(а) Tony - 12.12.2006, 14:38


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 12.12.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Tony @  12.12.2006,  14:23 Найти цитируемый пост)
Тоесть сам hash code явлсяется аддресом я4ейки памяти?

Нет.
1. Объекты которым нужно сравнение по содержимому (а не просто сравнение ссылок), переопределяют метод hashCode().
2. Никаких особых соглашений и гарантий на то, что возвращает hashCode() у Object нет.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
s8e8r8g8e
Дата 12.12.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 12.5.2006

Репутация: 1
Всего: 1



а toString() разве где-то заспецифицирован, вроде бы он тоже выдаёт что попало как и hashCode()(почти), одно ясно что если не переопределён то выдаёт то же что и в Object.
правда всё же надеюсь что хоть гарантий про hashCode у Object нет, но вот стандартным соглашениям он всё же следует.
PM MAIL   Вверх
Tony
Дата 12.12.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Переменная sss хранит ссылку на объект?  В виде
Код

getClass().getName() + '@' + Integer.toHexString(hashCode())

Если да, то ссылка на я4ейку памяти где хранится объект?


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
Shurr
Дата 13.12.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 5
Всего: 7



Переменная sss хранит ссылку на объект, но не в том виде, в котором ты говоришь. Стандартные средства java не позволяют увидеть значение ссылки в виде адреса ячейки памяти. Т.е. если ты попытаешься вывести содержимое sss:
Код

System.out.println(sss);
, то в результате ты получишь null если переменная не указывает на какой-нибудь объект, или результат выполнения метода toString() у объекта, если переменная указывает на какой-то объект. Адрес ячейки памяти ты посмотреть не можешь. 

Т.о.    
Код

getClass().getName() + '@' + Integer.toHexString(hashCode())
 - это просто код метода toString() у объекта Object.

Это сообщение отредактировал(а) Shurr - 13.12.2006, 10:54
PM MAIL   Вверх
Tony
Дата 13.12.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Цитата(Shurr @ 13.12.2006,  10:52)
Переменная sss хранит ссылку на объект, но не в том виде, в котором ты говоришь.

Спасибо. Стало ясно.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
maxlab
Дата 14.12.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2006

Репутация: нет
Всего: нет



Цитата(LSD @ 12.12.2006,  15:09)
1. Объекты которым нужно сравнение по содержимому (а не просто сравнение ссылок), переопределяют метод hashCode().

... а я переопределяю equals(), где тупо сравниваю поля объектов. Предполагаю что с hashCode()  сравнение объектов по содержанию должно выглядеть элегантней. А как это делается - пока не въехал smile  smile 

--------------------
Удивительное рядом... но оно запрещено!
PM MAIL   Вверх
VectorMan
Дата 14.12.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: 1
Всего: 4



maxlab, hashCode нужен для быстрой проверки на неравенство объектов (так как сравнение целых чисел очень быстрая операция), если у двух объектов hashCode различен, то объекты точно разные, если hashCode совпадает, то объекты могут иметь одинаковое значение, а могут и различаться.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0797 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.