Объяснение конструкции
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ComplexNumber that = (ComplexNumber) o;
return Double.compare(that.re, re) == 0 &&
Double.compare(that.im, im) == 0;
}
Не могу понять конструкцию(if ... return; if ... return; ... return) представленную в коде. Каким именно образом она работает? Прочитал, что данная конструкция то же самое, что и if... else if ... else if..., однако не понимаю почему это работает, ведь если первое условие выполняется, то для чего идти дальше? Как мне представляется, при компиляции происходит обход всех условий и на основе всех условий формируется конечный возврат true/false(возможно это не так, прошу объяснить). Мое предположение, что ответ кроется в том, что на этапе компиляции происходит проверка всех условий, а не как в Питоне - построчное чтение и именно поэтому if можно писать друг за другом.
Ответы (3 шт):
if (this == o) return true;
Здесь если this == 0 то функция возвращает значение, то есть завершается и дальше не выполняется
При вызове оператора return метод досрочно завершается и дальнейший код метода не исполняется
Это конструкция работает как в Python, так и в Java.
Оператор выхода из функции return может работать практически в любой строчке кода. Делается это именно для того, чтобы не ходить дальше и не вычислять ничего после этого кода. Этот оператор можно даже вставлять в циклы, что часто делается:
for(int i : list) if(i == 10) return true;
Если вы знаете, что условие неверное, то зачем идти дальше? Никаких предварительных расчетов нигде не делается, разве что оптимизация, но это уже другое.
Аналог из Питона:
class Test:
def __init__(self, name):
self.name = name
def equals(self, o):
if (self == o):
return True
if (o == None or self.__class__.__name__ != o.__class__.__name__):
return False
return self.name == o.name
class NoTest:
def __init__(self, name):
self.name = name
a = Test("Вася")
b = Test("Вася")
c = Test("Петя")
d = NoTest("Петя")
print(a.equals(b))
print(a.equals(c))
print(a.equals(a))
print(a.equals(None))
print(c.equals(d))