Почему этот отпечаток только «ложный» вместо «ложный ложный»? - PullRequest
0 голосов
/ 29 мая 2018
class test {
    public static void main(String[] args){
        Object o1 = new Object();
        Object o2 = new Object();
        System.out.println(o1==o2 + " " + o1.equals(o2));
    }
}

Я понимаю, почему o1==o2 и o1.equals(o2) false, но почему он печатает только "false" вместо "false false"?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

K139 правильно, но позвольте мне объяснить, почему.На первый взгляд это сложно, но все сводится к приоритету оператора.

См. Учебник по операторам API Java

Аддитивные операторы + предшествуют равенству ==

Итак, System.out.println(o1==o2 + " " + o1.equals(o2));

Более ясно передается аргумент: o1 == (o2 + " " + o1.equals(o2))

Это проверяет, эквивалентна ли o1 строка типа "java.lang.Object@123a439b false",результат равен false, и вы видите это как единственный выход.

Добавление круглых скобок вокруг первой проверки эквивалентности приводит к выполнению операций в указанном вами порядке.

System.out.println((o1==o2) + " " + o1.equals(o2));

Это дает: false false

0 голосов
/ 29 мая 2018

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

Его сравнение o1 со всем o2 + ""+ o1.equals (o2) Строка.

Я добавил пробелы для лучшего просмотра.

System.out.println(o1   ==       o2 + " " + o1.equals(o2));

, если вы хотите двойное значение false.Вот модифицированный оператор println.

System.out.println((o1 == o2) + "    " + o1.equals(o2));
...