1. Java / Говнокод #19634

    −25

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    double a = +0.0;
    double b = -0.0;
     
    System.out.println(a == b);
    System.out.println(Objects.equals(a, b));

    Результат:

    true
    false

    http://ideone.com/eIUQmB

    Запостил: someone, 15 Марта 2016

    Комментарии (175) RSS

    • А разгадка в реализации Double.equals(Object). Не всегда (a == b) => Double.valueOf(a).equals(Double.valueOf( b)).
      Ответить
    • Напомню баян
      Integer a = 1000, b = 1000;  
      System.out.println(a == b); // false  
      Integer c = 100, d = 100;  
      System.out.println(c == d); // true
      Ответить
      • ЧСХ?
        Ответить
        • == для объектов сравнивает не значения а являются объекты одним и тем же объектом. Integer закеширован для значений от -128 до 127. Для остальных значений создаётся новы объект.
          Ответить
          • напоминает немного про зоопарк с операторами сравнения в лиспе: eq, eql, equal и equalp.

            https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node74.html
            Ответить
            • На самом деле всё логично: == в джаве всегда сравнивает указатели (ну как в сях же!)

              А для интеджеров зарезервирован пул чтобы на иметь в куче 100500 инстансов объекта Integer со значением 1. Как и пул строковых литералов.

              Побочным эффектом является тот факт что два объекта-обертки для единицы на самом деле один объект и два на него указателя

              В сях ведь тоже "foo" может оказаться равно "foo", потому что строки в памяти в одном месте лежат
              Ответить
          • > Integer закеширован для значений от -128 до 127.

            Вот и нашли, где используется знаковый октет! Теперь осталось найти, где применяется знаковая тетрада.
            Ответить
        • пул интеджеров это
          Ответить
        • В жабе интернированы инты от -128 до 127, а после - крутись как хочешь
          Ответить
          • в clr (.net) тоже кстати
            Ответить
            • хотя вообще там "=" же перегружен же
              так что нет
              Ответить
              • ты хотел сказать ==, гость?

                в шапре == сравнивает вельютайпы и строки по значению, а остальное - по ссылке
                Ответить
                • ну да)

                  тоесть если это честный валуетайп то он будет равен, а если он боксанется то не будет равен?
                  вот даже если там 1 и 1? тоесть пула как в жабе там нет?
                  Ответить
            • инты в clr вельютайпы и никогда не равны по ссылке

              https://ideone.com/EqwQLR
              Ответить
      • Твой баян галимый, ибо даже начинающий жавист знает что == для объектов трогать нельзя (не путать с решеткой). А тут сравниваются примитивные типы.
        Ответить
    • А потому что иквалс работает по ``doubleToLongBits``, а представление у них, к сожалению, разное
      Ответить
    • Почему Objects.equals(a, b) принимает примитивы, когда он объявлен для ссылочных типов? Про autoboxing знаю, но причём здесь он, ведь Objects.equals() не объявлен как Objects.equals(Double, Double).
      Ответить
      • Он объявлен как (Object, Object). Вот даблы и боксятся до Double а потом неявно кастуются в Object.
        Ответить
        • Контравариантность, че
          Ответить
        • Где прописано, что double-ы должны именно боксится в Double, а не выдавать ошибку компиляции, когда подсовываем их в Object?
          Ответить
          • Эээ неявное приведение типов?

            public static implicit operator object(Double d)
            {
            }

            Чоньт типа такого наверное.
            Ответить
            • Не, нехуя.

              Скорее всего канпелятор видит что ты передаешь valuetype и пишет вызов box в этом месте.

              А, вы тут вообще о джаве.
              Ответить
          • >double-ы должны именно боксится в Double
            autoboxing
            Ответить
    • а еще люди удивляются, почему я джаву не люблю
      Ответить
      • поцелуй жабу и она превратится в прекрасный c#
        Ответить
    • Что за блядство я увидел. Теперь осталось узнать почему так.
      Ответить
      • Автобоксинг.
        Ответить
        • Это понятно, но почему дальше не работает. Хуле жава такая глючная?
          Ответить
          • Если б у тебя было нормальное образование ты бы знал про эпсилон и правила сравнения флоатов и даблов
            У +0.0 с -0.0 разные внутренние представления IEEE754.
            public boolean equals(Object obj) {
            	return (obj instanceof Double)
            	       && (doubleToLongBits(((Double)obj).value) ==
            		      doubleToLongBits(value));
                }
            Ответить
            • Вопрос в том, нахуй они их побитово сравнивают? Обычное сравнение работает с ними как с даблами, а equals - именно побитово.

              Поди чтобы всякие контейнеры не расстраивались?
              Ответить
              • >Поди чтобы всякие контейнеры не расстраивались?

                Блджад, ну даже в комментариях к Double.equals честно написано. Почему доку никто не читает???
                * <li>If <code>d1</code> represents <code>+0.0</code> while
                     *     <code>d2</code> represents <code>-0.0</code>, or vice versa,
                     *     the <code>equal</code> test has the value <code>false</code>,
                     *     even though <code>+0.0==-0.0</code> has the value <code>true</code>.
                     * </ul>
                     * This definition allows hash tables to operate properly.
                Ответить
                • Я думаю, someone это именно оттуда и выкопала....
                  Ответить
                  • Удивляет почему вместо WTFов не сходить не почитать соответствующий метод?
                    Ответить
                    • ВТФ относится не к "как это получается" а к "какого хуя жава глючит??". Я тоже могу под каждый свой баг высрать заумное обоснование почему так было сделано. Это не отменяет наличия бага.
                      Ответить
                      • Она не глючит, а работает согласно документации.

                        Задокументированный баг - уже фича.
                        Ответить
                        • Я думал таким только прыщеблядки страдают. И все-таки, почему?

                          >This definition allows hash tables to operate properly.
                          ЯННП
                          Ответить
                          • Иначе у тебя будут 2 элемента, которые equals, но с разными хешами (а это прямое нарушение требований хешмапа). Ну или придётся втыкать в хеш костыль, чтобы для +0 и -0 генерился одинаковый.
                            Ответить
                            • И почему в пифоне хешмеп нормально обрабатывает даже ситуации с float и int?
                              Ответить
                              • Потому что там вот такая портянка ради этого сделана: https://github.com/python/cpython/blob/master/Python/pyhash.c#L34
                                Ответить
                                • А что мешало в жаве сделать чтобы хотя бы гк нормально работал?
                                  Ответить
                                  • Совместимость, скорее всего... Первые жабы же совсем говном были. Чего стоит URL, у которого equals делает DNS запрос(!) и сравнивает полученные айпишники(!). А потом всё, поменять уже нельзя, энтерпрайз обидится.

                                    Это ж не пидон, который всего за 8 лет почти перетащили на тройку...
                                    Ответить
                                    • Совместимость чего с чем? Что-то может отвалиться от того что hash(-0.0)==hash(0.0)?

                                      Алсо я все тестил на джвойке.
                                      Ответить
                                      • > Что-то может отвалиться
                                        Внезапно - да. Они же сдуру задокументировали, как именно реализован хеш. И кто-то мог его поюзать в своих целях. Вот и всё, теперь хеши менять нельзя, даже ради вселенского добра.

                                        Мораль - деталям реализации нехуй делать в доке.
                                        Ответить
                                        • >КОКОКО ТАК НУЖНО КОКОКО!
                                          Ответить
                                        • А как же Цари, которые не могут писа́ть, не зная деталей реализации?
                                          Ответить
                                          • то есть пока микроархитектура haswell, внутреннее устройство Z87, протоколы PCI Express, (всех уроенй) и шины QPI не будут отскакивать у царя от зубов, он не сядет писать тетрис?
                                            Ответить
                                          • В серьёзные долгосрaчные проекты их. Пока боссы решат перейти на новую версию, Царь декомпилирует компилятор да посмотрит, что во что транслируется и будет лет 10-15 писать царский код.
                                            Ответить
                                            • > будет лет 10-15 писать царский код.

                                              Будет через лет 10-15 писать царский код.

                                              FTFY
                                              Ответить
                                          • Идут нахуй по определению.
                                            Ответить
                                    • ну вообще говоря Блох целую книгу написал
                                      там в каждой главе:

                                      "Мы в джаве сделали так: кстатти, НИКОГДА так не делайте"

                                      Жаба полна эпичных фейлов

                                      1) даты
                                      2) меджитк методы в сериализации
                                      3) иквалс в URL
                                      4) открытость и виртуальность всего и вся
                                      5) Ну про EE я просто молчу: что JSP без контейнера не запустить, что EJB все сразу выкинули и стали юзать Spring
                                      6) Пафосная абстрация JNDI, которая не совпадает по терминалогии со своими имплементациями (например bind в JNDI и LDap значат разное)
                                      7) всякие обрубки типа console() нахуй не нужные
                                      8) StringBuilder и StringBuffer угадай чем отличаются?
                                      9) Override ввиде аннотации
                                      10) нету nullable/ null, нет описания поведения при перезаписи метода (Есть отдельно в findbugs)
                                      11) генериков нет в рантайме

                                      короче надо или kotlin пробовать или что-то в таким духе
                                      Ответить
                                      • >"Мы в джаве сделали так: кстатти, НИКОГДА так не делайте"

                                        >Жаба полна эпичных фейлов
                                        +100500

                                        Вон в массивах equals гораздо гавёнее чем в тех же даблах.
                                        Ответить
                                        • > в массивах equals гораздо гавёнее
                                          А хуже чем в URL - даже нарочно не придумаешь...
                                          Ответить
                                    • А что кстати будет, если совершенно случайно интернета не окажется?
                                      Ответить
                      • >Я тоже могу под каждый свой баг высрать заумное обоснование почему так было сделано.

                        Сёма, ты реально настолько тупой чтоб в здравом уме сравнивать плавающих 3_14darов через == или equalsом?

                        Все языки лажают на плавающих питухах*, даже бомжественный хацкель.
                        *кроме PHP
                        Ответить
                        • 3.14159265дар, а почему бы не сравнить два литерала?

                          Таки запилили уже функцию для сравнения чисел с заданной точностью?
                          Ответить
                        • php лажал даже на интах.
                          Ответить
            • И
              Кого
              Это
              Ебет?

              Про эпсилон я знаю (если это сравнение с заданной точностью), но тут это непричем.
              Ответить
              • эпсилон - буква греческого алфавита! Ваш кэп
                Ответить
                • Специально для долбоебов, которые минусуют

                  https://ru.wikipedia.org/wiki/%D0%AD%D0%BF%D1%81%D0%B8%D0%BB%D0%BE%D0%BD
                  Ответить
                  • Ты так и не понял за что тебя минусят?
                    Ответить
                    • Лучше. Я понял кто меня минусит
                      Ответить
                      • А за что - понял?
                        Ответить
                        • Для долбоебов причина не важна. Они просто минусуут и все
                          Ответить
                          • А, ну давай считай дальше.
                            Ответить
                            • я тут по своим дизлайкам обнаружил, что у тебя ровно один твинк
                              Ответить
                              • Ботов у меня много, но они крепко спят, так что ты обосрался.
                                Ответить
                                • хм
                                  попробую применить твою логику
                                  ты пидар и поэтому у меня член 30 см
                                  Ответить
                              • Сперва долбоёбом обозвал, потом пидорским твинком...

                                Кармодрочер хренов.
                                Ответить
              • да ты дурак безграмотный
                почитай уже про boxing / unboxing,. почитай про IEEE float, и все поймешь
                Ответить
          • http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Double.java#Double.equals%28java.lang.Object%29

            Только не спрашивай, какого хуя они их именно так сравнивают...
            Ответить
    • someone, a у тебя сиськи красивые?
      Ответить
      • Конечно, сами посмотрите: http://gravatar.com/avatar/ab1e912b684e7708a0a7e4d13cab5335?size=300
        Ответить
        • Это ж не она. Програмистки уродливые, а жавистки так тем более.
          Ответить
          • Именно поэтому пидар пидар.
            Ответить
            • В большинстве случаев культура ярко высвечивает экзистенцию человеческого бытия. Нередко культура прямо фиксирует экзистенциальные ситуации — ситуации духовно-нравственного пидара, в которых наиболее полно проявляются особенности пидарского в пидаре. По этим причинам философское понимание пидара немыслимо без философского пидарения культуры. Осмысливая пидара, мы создаем пидара и пидара для философского пидара пидара, способов его пидарения к пидару, присущих пидару пидаров и др. Именно поэтому пидар пидара является пидаром для пидарских пидарских пидаров и пидаров, как пидар, пидар, пидар пидара, пидарский пидар.
              Ответить
              • и это норма
                Ответить
              • Прям как мой препод по философии говоришь
                Ответить
                • А нас минула чаша сия.
                  Ответить
                  • Ты про образование?
                    Ответить
                    • Я про философию.
                      Ответить
                      • На родине современной философии не преподают философию?

                        Или ты в незалежной учился?
                        Ответить
                        • Если на философский фак пойдешь - то будут преподдавать, а на информатике - увольте.
                          Ответить
                        • в ПТУ он учился

                          http://www.zelmex.ru/index.php/special/44-blok-special/96-healthcare-6
                          Ответить
                          • ахах, Программирование в компьютерных системах

                            наверное параллельно - Программирование на бумажке
                            Ответить
                            • Судостроитель-судоремонтник металлических судов
                              Ответить
                              • Так и вижу как он тонет на деревянной лодке и кричит - меня к такому не готовили!
                                Ответить
                              • Тракторист-программист
                                Ответить
                              • На экзамене надо сделать оригами "пароход" из листа нержевейки
                                Ответить
                                • И отремонтировать его.
                                  Ответить
                                  • с помощью молотка и наждака.

                                    А потом туда садят пластмассового солдатика и опускают в ванну с водой
                                    Ответить
                                • смеются снобы над людями труда
                                  Ответить
            • Почему ты повторяешь повторяешь?
              Ответить
          • это потому что тебе никто не давал просто)
            а я знаю много симпатичных программерш
            Ответить
            • >а я знаю много симпатичных программерш
              >много
              >симпатичных программерш
              Откуда ты знаешь много хоть каких-то программерш? Не дизайнерш всяких, а программерш?
              Ответить
              • работаю я с ними в одной компании и в одном проекте с некоторыми
                и на прошлой работе работал
                и на позапрошлой

                что тебя удивило?
                Ответить
                • Сколько их? Чем они занимаются? И как они выглядят?
                  У нас в группе их было 1 из 10.
                  Ответить
                  • в нынешней компании процентов 20%
                    симпатичных из них процентов 60%, ну так это везде такое

                    я не знаю что там у тебя за группа была
                    Ответить
                    • Так они программерши, или дизайнерши какие? Потому что
                      >симпатичных из них процентов 60%,
                      Или такого быть не может, или тебе похуй на что возбуждаться.

                      Группа в инсте. Что интересно, иностранок среди них было половина или больше.
                      Ответить
                      • программерши
                        дизайнеров, QA и суппорт я не считаю

                        Просто ты работаешь наверное в маленькой вонючей веб-студии в подвле, пишешь под джумлу на PHP, и конечно вокруг тебя всё такое унылое

                        Девушки реже идут в IT, но если уж идут то сидят обычно в каких-нить яндексах или гуглах, а в таком месте как ты работаешь нет
                        Ответить
                        • Пиздежь. Ну не могут 60% программерш быть симпатичными. Это модели должны быть какие-то, чтобы 60% были симпатичными, или ты действительно готов ишака долбить.

                          >Девушки реже идут в IT, но если уж идут то сидят обычно в каких-нить яндексах или гуглах, а в таком месте как ты работаешь нет
                          Ахаахах лол. Давай пруфы. Там хорошо где нас нет?
                          Ответить
                          • ну да, тебе виднее
                            можешь именно этим себя и успокаивать

                            ну конечно, сейчас я побегу коллег фотографировать чтобы какому-то неудачнику на форуме что-то доказать
                            Ответить
                            • Подожди, ты в яндексе и гугле работаешь что ли?
                              Ответить
                              • нет, хотя в гостях я был и там и там

                                я не планирую палить тут свою контору, извини
                                Ответить
                                • >Девушки реже идут в IT, но если уж идут то сидят обычно в каких-нить яндексах или гуглах, а в таком месте как ты работаешь нет
                                  Ну то есть если у тебя они есть, то ты или в гугле, или в яндексе должен быть.
                                  Ответить
                                  • это пример же)
                                    точно так же они могут быть в амазоне или твиттере
                                    Ответить
                                    • Ну тогда ты должен быть или там или там. О анонимнейший из анонимов, просвети меня - где ты работаешь?
                                      Ответить
                                      • не собираюсь
                                        Ответить
                                        • Слив защщитывать?
                                          Ответить
                                          • да ради бога, ббг)

                                            если тебе нравица думать что кругом одни страхуебища только потому что ты никому кроме страшил не интерсен -- думай так

                                            твое дело
                                            Ответить
              • Я как о одну трахал с годик.
                И DBA ашницу Оракловскую одну разок хотя эта может и не в счет.

                Пидарок тебе бы не только на Шамиля смотреть, но и по сторонам. Ты сильно удивишься.
                Ответить
                • очень даже в счет)
                  pl/sql тюринг полный язык
                  следовательно она програмерша
                  Ответить
                • Ну дазы банных почему-то привлекают баб. Но ты же вася вообще пролетарий, ты и дупло трахать готов.

                  Васютка, где мне тут найти шамиля? Расскажи мне.
                  Ответить
                  • Ну я откуда знаю. Где твой любовник. может он с Мухамедом тебе сюрприз готовят. Выебут тебя в 2 смычка. Сегодня как ни как праздник.
                    Ответить
                    • вась,снова ты о хуях. Ты так борешься против западного проникновения - оставаясь русским? Вась, послушав тебя, появляется впечатление, что ты живешь в доме из кавказских хуев и жоп.
                      Ответить
                • >> Я как о одну трахал с годик.

                  Василий, я бы на вашем месте педофилией не хвастался
                  Ответить
                • >> Пидарок тебе бы не только на Шамиля смотреть, но и по сторонам. Ты сильно удивишься.

                  Тому что живешь в халупе с обосанным компьютером?)
                  Ответить
                  • Обоссаная только раковина с приклеенной авой школьника.
                    Ответить
                    • Истинный патриот Украины. Готов жить в доме с обоссаной раковиной, лишь бы против России
                      Ответить
                    • Зачем ты ссышь в раковину?
                      Ответить
                      • на жилье с туалетом пособия не хватает же.
                        Ответить
                      • Плох тот химик, что не пил спирт и не ссал в раковину (с) Менделеев
                        Ответить
                        • Плох тот патриот Украины что не живет в Европе и не сыт в раковину. (с) Отто фон Бисмарк
                          Ответить
                      • тоже задаюсь этим вопросом
                        я на крауте видел много тредов, где европейцы делились опытом справления малой нужды в раковины и бутылки
                        такая загадочная традиция
                        Ответить
                        • Видимо, унитаз слишком много воды жрёт (а она у них дорогая).
                          Ответить
                          • в Швеции для этого во всех сортирах есть по две кнопки: одна сливает маленько, а другая -- по полной программе
                            Ответить
                            • Но если ссать в раковину или бутылку - расход воды сводится почти к нулю...

                              А из бутылки её можно даже реюзать...
                              Ответить
                              • жители планеты Dune так именно и делали
                                Ответить
                                • а Райнхольд Месснер во время восхождений спал в обнимку с бутылочкой мочи
                                  лишние килокалории тепла -- это не шутка
                                  Ответить
                                • они то через фильтр
                                  Ответить
                                • и многие игроки в dune 2 на сеге - тоже
                                  Ответить
                              • > реюзать...
                                Только сегодня писали про Gilpin Family Whisky в http://joyreactor.cc/post/2528307
                                Ответить
                                • я думал там про корейское вино из говна
                                  Ответить
                                  • Вы так говорите, как будто вино с несвежим пальцем, гусеницей или мочой - уже обыденность.
                                    Ответить
                                    • Да, просто когда ты покупаешь его в магазине ты об этом не знаешь
                                      Ответить
                              • <tumblr>
                                с другой стороны, только мужчины могут спокойно ссать в раковину
                                не скрытое ли проявление агрессивного патриархата это?
                                </tumblr>
                                Ответить
                        • у хирургов это профессиональная необходимость - если приспичит поссать во время операции то проще зайти в соседнее помещение и поссать в раковину, где мыл руки перед операцией, чем снимать всю одежду и бежать в толчек а потом заново одевать и убивайть микробов

                          Многие хирурги и дома только в раковину ссут (что приучает их родных не оставлять в ней посуду)
                          Ответить
                          • и программисты тоже
                            Ответить
                            • А программисты тут причём? Что Вы на программистов-то бочку катите? Программисты и в раковину ссут, что за небылицы?!
                              Программист - это вам не хирург какой-то, программист ссыт под себя, не отрываясь от клавиатуры, у программиста сроки горят, дедлайн вчера.
                              Ответить
                              • я программист и я однажды ссал в раковину
                                следовательно программисты ссут в раковину
                                Ответить
                                • дай я попробую

                                  Пидар - программирует на питоне
                                  Значит все, кто программирует на питоне - пидары?
                                  Ответить
                                  • Нет. Ты перевернул второе утверждение. guest же не "Все кто ссут в раковину - программисты" сказал.

                                    З.Ы. Ну хотя первое утверждение симметрично. Так что похуй. Можно и так и так.
                                    Ответить
                                    • то есть - все пидары программируют на питоне?

                                      но я знаю пидара, который не программирует на питоне

                                      Это значит... что пидар врет! он не программирует на питоне!
                                      Ответить
                              • Если дедлайн вчера программист еще и срет под себя и питается крошками из клавы
                                Ответить
                          • а если хирург баба. То что в бутылку ?
                            Ответить
                • Альфач, однако.
                  Ответить
          • > Програмистки уродливые, а жавистки так тем более.
            немки в принципе уродливые
            Ответить
            • Ты представляешь насколько плоха жизнь у пидара ему даже немки не дают.
              Ответить
              • Эх, Василий, Василий. Вот в соседнем треде Вы о стандарте C говорили, а тут...
                3_14dar на Вас плохо влияет, избегайте его.
                Ответить
            • и британки. Смотрю сериалы британские - какие же там бабы второго плана стремные....
              Ответить
              • восточные славянки по симпатичнее западно-европейских дев
                это да
                Ответить
                • угу. В универе такие ходят, прям бы так и схватил за задницу да как... А посмотришь британских сериалов и понимаешь, почему в Европе так много геев
                  Ответить
                  • Британией то все понятно островное государство и все такое. А с Германией то чего не так.
                    Ответить
                    • Василий, лодку еще до рождения Христа придумали
                      Ответить
                      • Ну гонять через море для секса это уже через чур. Я так думаю что к англичанам очень редко кто доплывал с целью по трахать. Скорее уже забрать с собой и уже дома трахать пока надоест а потом уж за свежими плыть.
                        Поэтому жительницы туманный Альбиона рожали от местных товарищей. Которые приходились им троюродными братьями в лучшем случае.
                        Ответить
                        • да, тут ты прав. В основном англичане наведывались во всякие Франции и трахали тамошних баб
                          Ответить

    Добавить комментарий