Столкнулся со следующий проблемой, System.identityHashCode выдает одинаковый хеш для контролов одновременно находящихся на форме.
Вот лог, формат [хеш] : obj.toString()
Здравствуйте, AlxB, Вы писали:
AB>Что мне показалось странным — это то что хеш состоит из 2х одинаковых частей по 4 байта причем для всех контролов. Вот например еще toString():
Андроид?
Re[2]: System.identityHashCod считает не уникальный хеш
Он не очень-то уникальный http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6809470
AB>Столкнулся со следующий проблемой, System.identityHashCode выдает одинаковый хеш для контролов одновременно находящихся на форме. AB>Вот лог, формат [хеш] : obj.toString()
Может у вас с выводом что, а не с кодами?
AB>Что мне показалось странным — это то что хеш состоит из 2х одинаковых частей по 4 байта причем для всех контролов. Вот например еще toString():
По 2 байта кстати.
AB>javax.swing.plaf.BorderUIResource$EmptyBorderUIResource@15e215e2
Это IDE так показывает?
Re[2]: System.identityHashCod считает не уникальный хеш
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, AlxB, Вы писали:
B>Он не очень-то уникальный http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6809470
Да, конечно. Но, как я сказал, меня смутила симметрия в коде (по 2 байта вы правы )
B>Может у вас с выводом что, а не с кодами? B>Это IDE так показывает?
Нет это логирование с выводом все в порядке.
.
Re[3]: System.identityHashCod считает не уникальный хеш
Здравствуйте, AlxB, Вы писали:
AB>Нет это логирование с выводом все в порядке.
Вы явно System.identityHashCode там вызываете и потом сами в hex форматируете?
Re[4]: System.identityHashCod считает не уникальный хеш
Здравствуйте, Blazkowicz, Вы писали:
AB>>Нет это логирование с выводом все в порядке. B>Вы явно System.identityHashCode там вызываете и потом сами в hex форматируете?
Да, именно так, кроме того я этот хеш пытаюсь поместить в Hashtable и получаю exception что
такой элемент уже есть.
.
Re[5]: System.identityHashCod считает не уникальный хеш
Здравствуйте, AlxB, Вы писали:
AB>Да, именно так, кроме того я этот хеш пытаюсь поместить в Hashtable и получаю exception что AB>такой элемент уже есть.
Мистика. Это со всеми объектами или только компанентами? Можно ли как-то получить тестовый пример кода? У меня большое Swing приложение. Подобных странностей не наблюдаю. Java 1.6.0_u21
Re[6]: System.identityHashCod считает не уникальный хеш
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, AlxB, Вы писали:
AB>>Да, именно так, кроме того я этот хеш пытаюсь поместить в Hashtable и получаю exception что AB>>такой элемент уже есть. B>Мистика. Это со всеми объектами или только компанентами? Можно ли как-то получить тестовый пример кода? У меня большое Swing приложение. Подобных странностей не наблюдаю. Java 1.6.0_u21
Я так подозреваю, речь идёт об одном и том же компоненте. Например, везде пытаются считать хеш не компонента, а родителя. Или какой-то константы, вроде Boolean.TRUE. Или спутали имена локальной переменной и члена класса.
Re: System.identityHashCod считает не уникальный хеш
Здравствуйте, AlxB, Вы писали:
AB>Здравствуйте,
AB>Столкнулся со следующий проблемой, System.identityHashCode выдает одинаковый хеш для контролов одновременно находящихся на форме.
А в чём проблема-то?
AB>Кто нибудь почему это происходит?
Хеш-код не имеет никакого отношения к уникальности.
Разные объекты вполне могут иметь одинаковый хеш-код.
Он нужен чтоб объекты распихивать равномернее по хэш-таблицам, и больше ни для чего.
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, AlxB, Вы писали:
AB>>Да, именно так, кроме того я этот хеш пытаюсь поместить в Hashtable и получаю exception что AB>>такой элемент уже есть. B>Мистика. Это со всеми объектами или только компанентами? Можно ли как-то получить тестовый пример кода? У меня большое Swing приложение. Подобных странностей не наблюдаю. Java 1.6.0_u21
К сожалению у меня очень ограниченные возможности по доступу к приложению.
Вот, что мне удалось выяснить. Добавил я отладочный вывод к SwingSet2 и попросил запустить на том же PC, так там все в порядке с hash. Соответсвенно напрашивается вывод, что это что-то с приложением.
Я не сильно знаком с этой областью, не подскажет как такое может быть?
Есть ли какой-то менеджер памяти, который можно переопределить для своего приложения (насколько я понял identityHashCod возвращает референс на память где объект находится)?
Либо как то переопределить поведение System.identityHashCod?
Либо еще что-то, что нужно проверить. Будет интересно узнать любые идеи.
Спасибо,
.
Re[7]: System.identityHashCod считает не уникальный хеш
AlxB wrote: > Соответсвенно напрашивается вывод, что это что-то с приложением. Я не > сильно знаком с этой областью, не подскажет как такое может быть?
1. Вы неправильно выводите в логи хеш. Получается одна и та же строка,
независимо от хеша.
2. Вы вместо хеша выводите какую-то ерунду, всё время одну и ту же.
3. Вы вычисляете хеш от одного и того же объекта (а не от разных компонент).
Возможно от null.
Остальные варианты имеют пренебрежимо малую вероятность.