Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2014, 16:55   #1
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
Сообщение Gethashcode vs equals

я не сильно понимаю зачем эти 2 метода?Ну сравню я обьекты через equals,зачем мне сравнивать через gethashcode? Какое преемущество он дает?
ts-alan вне форума Ответить с цитированием
Старый 03.04.2014, 16:56   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

никакого. и для сравнения его использовать нельзя.
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 03.04.2014, 18:14   #3
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
Сообщение

ну например так сравнить
Код:
int a;
int b;
a.gethashcode()==b.gethashcode()
ts-alan вне форума Ответить с цитированием
Старый 03.04.2014, 18:40   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Глупо. Тем более, что равенство GetHashCode() не гарантирует равенство объектов. Конкретно для Int32 сработает в силу особенностей реализации, но делать так все равно нельзя.

Это сравнение из разряда
Код:
int a;
int b;
new Random(a).Next() == new Random(b).Next;
Тоже будет работать, но ни гарантий никаких, ни смысла никакого

p.s. пруф о недопустимости использования gethashcode для сравнения:
Код:
using System;

namespace ConsoleTestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            long a = -8418535196639666194;
            long b = 1337;
            Console.WriteLine("a = {0}", a);
            Console.WriteLine("a.GetHashCode() = {0}", a.GetHashCode());
            Console.WriteLine("b = {0}", b);
            Console.WriteLine("b.GetHashCode() = {0}", b.GetHashCode());
            Console.ReadLine();

        }
    }
}
Благодарить в репутацию. Проклинать — туда же

Последний раз редактировалось Luuzuk; 03.04.2014 в 18:57.
Luuzuk вне форума Ответить с цитированием
Старый 03.04.2014, 21:45   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

GetHashCode это быстрое сравнение, если они равны дальше нечего сравнивать
при всяких биндингах и т.п. используется
eval вне форума Ответить с цитированием
Старый 04.04.2014, 10:13   #6
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
GetHashCode это быстрое сравнение, если они равны дальше нечего сравнивать
Бред. Если хеши не равны, то дальше сравнивать смысла нет. Если хеши равны, то это еще ни о чем не говорит
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 04.04.2014, 10:34   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

про бред в справке поищите, ок?
eval вне форума Ответить с цитированием
Старый 04.04.2014, 10:37   #8
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Внимательнее справку почитайте, или хотя бы соберите пример из моего поста, если rtfm религия не позволяет. И не забивайте новичкам вроде ТС голову всякой чушью, ок?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 04.04.2014, 10:44   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

понятно, читать не ваш выбор
тогда помедетируйте на предмет того что когда переопределяете икуалс, то вам еще что-то настоятельно рекомендуют
eval вне форума Ответить с цитированием
Старый 04.04.2014, 10:49   #10
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

http://msdn.microsoft.com/ru-ru/libr...v=vs.110).aspx

Цитата из раздела "Заметки"
Цитата:
Равенство хэш-кодов не означает равенство объектов.
GetHashCode() используется для быстрого, но неточного сравнения. Если хэши объектов не равны, то и объекты не равны. Если хэши совпадают, то есть смысл вызвать Equals для точного сравнения объектов.

Хотя что это я вам объясняю, вы же лучше знаете. А msdn - вообще желтый неавторитетный ресурс, который гуру вроде вас читать не должен
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
equals Русtam Общие вопросы по Java, Java SE, Kotlin 2 01.10.2012 17:37
отредактировать программу и реализовать equals() и hashCode() akkalenik Общие вопросы по Java, Java SE, Kotlin 1 07.10.2011 20:16
equals!!! grimm_jow Общие вопросы по Java, Java SE, Kotlin 5 13.06.2010 13:45