Я застрял в java-коде и не понимаю, почему он не возвращает true

Этот код Java ниже не возвращает true в выражении if else...

public class DecimalComparator {

    public static void main(String[] args) {
        System.out.println(areEqualByThreeDecimalPlaces(25.367876,25.367873));
    }

    public static boolean areEqualByThreeDecimalPlaces(double a, double b){

        DecimalFormat threePreshizen = new DecimalFormat("###.###");
        String aNew = threePreshizen.format(a);
        String bNew = threePreshizen.format(b);

        System.out.println(aNew);
        System.out.println(bNew);

        if (aNew == bNew){
            return true;
        }else {
            return false;
        }
    }
}

Я ожидаю, что он вернет "true".

Сравните строки с .equals(). Кроме того, просто return aNew.equals(bNew) и удалите if/else

DustInCompetent 18.06.2019 10:41

Вы сравниваете два разных объекта. Используйте метод .equals().

Rashin 18.06.2019 10:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Замените блок if следующим:

return aNew.equals(bNew);

Это возвращает логическое значение, основанное на совпадении содержимого двух строк, а не на том, идентично ли значение их ссылки на память.

Если вы ожидаете, что любая из ваших строк будет null, вместо этого используйте

return Objects.equals(aNew, bNew);

Спасибо Остин Шефер. я решил это

DangerDeveloper 18.06.2019 11:30

Пожалуйста, примите ответ, чтобы любой, кто столкнется с этим вопросом в будущем, мог сослаться на него.

Austin Schäfer 18.06.2019 11:50

Другие вопросы по теме