Объяснение конструкции

@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 шт):

Автор решения: timur
if (this == o) return true;

Здесь если this == 0 то функция возвращает значение, то есть завершается и дальше не выполняется

→ Ссылка
Автор решения: Артем Косенко

При вызове оператора return метод досрочно завершается и дальнейший код метода не исполняется

→ Ссылка
Автор решения: Alex Krass

Это конструкция работает как в 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))
→ Ссылка