Dlaczego metoda zwraca true?

Dlaczego metoda zwraca true?
NO
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 7 lat
  • Postów:2
0

Cześć,
nie mogę rozpracować prostej sprawy. Dlaczego np. taka metoda:

Kopiuj
boolean check(){
        if (50 > 20) {
            return true;
        }
        if (50 > 10) {
            return false;
        }
        if (50 > 5) {
            return false;
        }
        return false;
    }

zwraca true, a nie false. Skoro każdy kolejny warunek jest sprawdzany, to już przy drugim if powinno wywalić false. Moje pytanie zrodziło się na kanwie przesłaniania metody equals(). Dlaczego kod:

Kopiuj
  @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;

miałby zadziałać prawidłowo, skoro moja metoda check() zawsze zwraca wartość pierwszego if?
Z góry dziękuję za wyjaśnienie.

edytowany 1x, ostatnio: flowCRANE
NO
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 7 lat
  • Postów:2
0

Dzięki za odpowiedź. Zacząłem Ci odpisywać, ale w trakcie mi się rozjaśniło. Nie pomyślałem na początku, że skoro nadpisana metoda equals() zwraca true już w pierwszym ifie, to nie trzeba dalej porównywać stanu wewnętrznego obiektów, bo to przecież ten sam obiekt w pamięci, więc dalsze sprawdzanie nie ma sensu.

Silv
Moderator Wiki
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Warszawa
2

W temacie wielu instrukcji return możesz przeczytać to: https://www.javacodegeeks.com/2015/01/multiple-return-statements.html


edytowany 2x, ostatnio: Silv
Wibowit
  • Rejestracja:ponad 20 lat
  • Ostatnio:dzień
  • Lokalizacja:XML Hills
1
notOccupiedNick napisał(a):

Dzięki za odpowiedź. Zacząłem Ci odpisywać, ale w trakcie mi się rozjaśniło. Nie pomyślałem na początku, że skoro nadpisana metoda equals() zwraca true już w pierwszym ifie, to nie trzeba dalej porównywać stanu wewnętrznego obiektów, bo to przecież ten sam obiekt w pamięci, więc dalsze sprawdzanie nie ma sensu.

Dziwne rozkminy. Metoda equals to metoda jak każda inna. Nie jest wykonywana w jakiś specjalny sposób. Kompilator nie rozmyśla sobie "hmm to jest equals, więc musi się wykonać do końca". W equalsie możesz wstawić dowolną logikę zwracającą booleana i będzie ona działać tak samo niezależnie czy siedzi w metodzie equals czy też może jakiejś inaczej nazwanej metodzie.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.