To ja pozwolę sobie trochę inaczej niż @furious programming opisał. W Javie każda metoda coś zwraca. Czasami jest to wartość, a czasami void
, czyli taka specjalna wartość oznaczająca NIC. Uwaga nie mylić z null
, które jest w pewnym sensie wartością. void
, czyli próżnia. I teraz patrzymy na System.out.println
. Zwraca void
, ale wykonuje pewną operację, którą nazywamy efektem ubocznym. Wypisuje coś na konsole. Powtórne wywołanie tej metody doda nam napis w konsoli. A teraz popatrzmy co robi return
. Otóż return
zwraca pewną wartość albo void
, ale co do zasady nie ma efektów ubocznych.
Jeżeli pamiętasz ze szkoły czym są funkcje, to można je podzielić na dwie grupy. Pierwsze to te bez efektów. Omawiane w szkole, bo są proste. Funkcja dodawania zawsze zwróci ten sam wynik dla podanych argumentów niezależnie ile razy ją wywołasz. Czasami nazywa się je czystymi (ang. pure). Drug grupę stanowią funkcje, które dla każdego wywołania powodują pewne nieodwracalne zmiany w otaczającym świecie np. wypisują coś do konsoli, albo zapisują do bazy danych (nie ważne).
Wracamy do Javy. System.out.println
należy do tej drugiej grupy zwraca void
(nie jest to ważne), ale ma efekt uboczny, którego nie kontrolujesz. Oraz, co ważne nie jesteś wstanie w prosty sposób ogarnąć w swoim kodzie (fun fact można uruchomić javę z przekierowaniem &1 > &0
, co daje ciekawe wyniki). Mówiąc prościej jeżeli chcesz poznać wynik działania metody w swoim kodzie, to używasz return
. Jeżeli chcesz go wypisać, ale nie zależy ci na nim w programie, to możesz użyć System.out.println
.