Java: void vs. return?

6 Antworten

return gibt aber nichts an dich weiter, sondern an die Maschine. Nämlich einen Wert, mit dem sie irgendetwas machen kann, zB wenn du in einer Funktion irgendeine komplizierte Formel anwendest und du das Ergebnis im main Teil weiterverwenden willst. Dann gibt return das Ergebnis an main weiter (bzw. gibt etwas zurück, wenn man sprachlich korrekt bleiben will) und dort kannst du dann irgendwas damit machen.

Wenn du nur die main Klasse verwendest bringt dir das Konzept gar nichts, solange du Java machst zumindest. In C und C++ ist es meines Wissens Usus, dass man die main Funktion als int definiert und sie 0 zurückgibt. Zumindest bei basic-Einsteiger-code

Da sind so ein paar Denkfehler drin. System.out.println gibt etwas auf die Konsole aus, das kann auch in einer void-Funktion geschehen. Der return-Wert bezieht sich darauf was die Funktion wiedergibt und steht vor dem Funktionsnnamen. (return kann übrigens auch in void-Funktionen in der Form return; verwendet werden, um den Durchlauf der Funktionslogik vorzeitig abzubrechen). Ein paar Beispiele:

class Test{
    private static String MSG = "Die übergebene Zahl ist ";
    private String getText(int a){
        return MSG + a;
    }
    private void printText(int a){
        System.out.println(MSG + a);
    }
    public static void main(){
      // Aufruf der void function
      printText(42);
      // Aufruf der String returnenden Funktion und anschließende Ausgabe
      var result = getText(42);
      System.out.println(result);
    }
}

System.out.println ist keine Rückgabe im eigentlichen Sinne. Das ist ja nur das, was du auf der Konsole angezeigt kriegst.

Interessant ist das, wenn du eine Funktion hast, die zum Beispiel mitgegebene Zahlen quadriert. Also z.B.

public void quadrieren(int x){
System.out.println(x*x);
}

Wenn du also quadrieren(2) aufrufst, dann steht in deiner Konsole am Ende 4, super. Aber was, wenn ich zwei mal quadrieren will. Dann müsste ich ja quadrieren(quadrieren(2)) machen. Das geht aber hier nicht.

Warum? Weil bei quadrieren als Argument eine Zahl rein muss.

Das hier: quadrieren(quadrieren(2)) muss eine Zahl sein (int), aber quadrieren(2) ist nichts (void), man kann damit nichts mehr anfangen, weil das Ergebnis nach der Ausgabe einfach verworfen wird.

Anders hier:

public int quadrieren(int x){
return x*x;
}

Wenn du das aufrufst, hast du am Schluss gar nichts in der Konsole stehen, du musst stattdessen folgendes noch machen.

System.out.println(quadrieren(2));

In diesem Fall gibt quadrieren(2) eine Zahl zurück, die dann gedruckt werden kann. Witz ist, dass nun quadrieren(2) selbst eine Zahl ist, also ist auch quadrieren(quadrieren(2)) möglich ist.

Am Anfang ist es ziemlich Wurscht, wie man das jetzt löst, aber wenn man, wie in meinem Beispiel, (auch verschiedene) Methoden schachteln will, dann ist es sehr viel einfacher, wenn man mit Rückgabewerten arbeitet.

Nichts hält dich aber davon ab, sowas zu machen:

public int quadrieren(int x){
System.out.println(x*x);
return x*x;
}

Damit kannst du dann sozusagen live verfolgen, was gerade gerechnet wird und gleichzeitig mit Rückgabewerten arbeiten.

Woher ich das weiß:Berufserfahrung – Programmierer

void bedeutet dass die Methode keinen Rückgabewert hat.

Return ist eine Anweisung die sagt, dass die Methode einen Wert zurückgeben soll. Eine void Methode braucht daher keine Returnanweisung, es ist maximal return; erlaubt was den Rücksprung aus der Funktion erzwingt.

Und was bedeutet du bekommst immer einen Rückgabewert geliefert, wenn du System.out.println() so aufrufst verwendest du gar keinen Rückgabewert.

Du verwechselst Rückgabe mit Ausgabe. Dein Beispiel mit System gibt etwas direkt aus. Funktionen mit Rückgabewert oder gar keinem geben nichts direkt aus sondern an die aufrufende Funktion zurück, die das dann weiterverarbeiten kann.