С апи приходит объект, в нем есть org.json.simple.JSONObject. И из базы я достаю данные и преобразовываю то же в JSONObject. Если привести оба объекта к строке и сравнить через equals, то результат будет положительный (true). Я использую @EqualsAndHashCode(of = {"myfield"}) из Ломбока.
Но если я сделаю так:
MyJsonObject.equals(MyJsonObject2)
я получу отрицательный результат.
Путем эмпирических испытаний выяснил, что если JSON состоит из 2х пар ключь-значение, по метод equals на них работает. Но если сравнивать одинаковые объекты с тремя парами значений, то equals всегда выдает false.
Та же самая ситуация, если я попытаюсь преобразовать к HashMap и сравнить через equals. И тут совсем ни при чем аннотации, которые я вешаю на классы. Как вообще такое может быть, что два абсолютно одинаковых объекта эквивалентны, если в них по 2 пары, и не эквивалентны, если 3? Я что-то не понимаю?
Как сравнивать два объекта JSONObject?
Дело в том, что когда я получаю объект из БД, то одно из значений его ключей, например "IntValue": 1 - считается как Long тип (1 - Long). А когда я принимаю запрос эта же еденица считается Int типом. Из-за того что типы разные, хоть и значения одинаковые, объекты не раны. Вывод: в таких местах надо смотреть на типы.
Продвижение своими сайтами как стратегия роста и независимости