void Methode gibt Array zurück

Kann mir jemand sagen, warum primitive Datentypen immer mit return zurückgegeben werden müssen, während Arrays das nicht müssen?
Java:
import java.util.Arrays;

public class Test {

  public static void main(String[] args) {
   
  int i[] = {1, 2, 3};
  int j = 1;
   
  test(i, j);
   
  System.out.println(Arrays.toString(i));
  System.out.println(j);
   
  }
   
  public static void test (int[] i, int j){
   
  i[0]++;
  i[1]++;
  i[2]++;
  j++;
   
  }
   
}

upload_2016-9-27_14-22-30.png
 

Anhänge

  • upload_2016-9-27_14-22-30.jpeg
    upload_2016-9-27_14-22-30.jpeg
    10,5 KB · Aufrufe: 35

Pahiti78

Mitglied
Hallo Tommy,

die übergebenen Parameter (i und j) welcher du der Methode mitgibst, sind lediglich lokale Variablen.
Und deren Werte werden der Methode als Kopie übergeben.
Innerhalb der Methode machen die das ganze Zeug mit und nehmen die erwarteten Werte dann an.
Am Ende der Methode werden diese zerstört.
Setze doch mal in die test-Methode ein System.out.println()-Anweisung ein und lass dir j innerhalb der Methode ausgeben.

J ist in der Parameterliste eine andere Variable als die lokale, welche du in der main Methode deklariert hast.
Probier noch etwas aus. Und schreibe statt "test (int [] i, int j)" - test ( int[] i, int lokaleVariable)" und lass diese im Methodenrumpf inkrementieren. Du siehst dann, dass du die Methode genauso aufrufen kannst und dass das j mit dem anderen j eigentlich nichts zu tun hat.

Und das Array ist ein referenzdatentyp. Es wird der Methode somit auch nicht das Array übergeben, sondern nur ein Zeiger. - wie bei Objekten.
Und dieser Zeiger wird vorher ebenfalls kopiert. Es wird also der Verweis auf das Array kopiert und dann in die Methode übergeben. Der kopierte Verweis wird dann am Ende der Methode ebenfalls zerstört. Und wenn du dann in der Methode so ein paar Sachen am Array veränderst, veränderst du auch das Array bzw. die Elemente.
 

Neumi5694

Top Contributor
@tommy: Was du sagst, trifft nicht nur auf primitive Typen zu, sondern AUCH auf Arrays.
In deinem Beispiel änderst du nämlich nur den INHALT des Speicherbereichs und nicht, was in der Variable steht, die auf den Speicherbereich zeigt.


Hier ist ein Gegenbeispiel, wo das passiert:
Java:
  public static void test2(int[] array) {
  array[0]++; //Änderung wird nach außen übernommen, der INHALT des Array wird geändert, nicht die Array-Referenz selbst.
  array = new int[]{5,4,3,2,1};//geht nicht zurück nach außen, die lokale Variable array kriegt einen neuen Speicherbereich, dort wird 5,4,3,2,1 reingeschrieben. Von außen merkt man davon nichts.
  }

Hier ist ein ähnliches Beispiel mit Attributen.
Java:
  public static void test3(Point2D.Double p) {
    p.setX(2);
    p.setY(3);
    p = new Point3D.Double(4,5);
    //An dieser Stelle hat p die Werte 4 und 5, während die von außen sichtbare Variable die Werte 2 und 3 hat.
  }
Kurz: Sobald du <Variablenname> = ...; schreibst, dann kriegt die aufrufende Methode die Änderung nicht mehr mit, egal um welchen Datentyp es sich handelt.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
V Methoden printChar Methode mit Rückgabetyp void Java Basics - Anfänger-Themen 26
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
N Groß- und Kleinschreibung bei Java: void Methode Java Basics - Anfänger-Themen 1
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
C Void Methode überladen Java Basics - Anfänger-Themen 5
V for-Schleife in einer void Methode Java Basics - Anfänger-Themen 3
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
Silvascus Void Methode einem Stringparameter im syso-Befehl hinzufügen Java Basics - Anfänger-Themen 3
S Static void Methode Java Basics - Anfänger-Themen 12
D Array void Methode erstellen. Java Basics - Anfänger-Themen 12
B Geerbte Instanz kann keine void Methode ausführen?! Java Basics - Anfänger-Themen 15
D generische methode <T> void . Java Basics - Anfänger-Themen 9
K void Methode abbrechen Java Basics - Anfänger-Themen 7
T void Methode -> keine Chance Java Basics - Anfänger-Themen 6
B Problem mit einer static void Methode Java Basics - Anfänger-Themen 8
C Kann mir jemand sagen warum public void unzulässig ist? Java Basics - Anfänger-Themen 2
S Methoden - Warum int wenn auch void? Java Basics - Anfänger-Themen 3
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
MrDramasetter Rückgabetyp Void oder Sting Java Basics - Anfänger-Themen 18
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
H Variablen Void und der Rückgabewert Java Basics - Anfänger-Themen 6
G Interpreter-Fehler Problem mit void-Methoden Java Basics - Anfänger-Themen 2
T Void Java Basics - Anfänger-Themen 32
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
T Java Code Hilfe - public void xxx() Java Basics - Anfänger-Themen 2
T public void - Problem Java Basics - Anfänger-Themen 10
M Methoden void verschachteln Java Basics - Anfänger-Themen 4
B Void Mehoden Testen Java Basics - Anfänger-Themen 13
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
L Objekte aus einem void in anderen voids verwenden Java Basics - Anfänger-Themen 8
K GUI Button methoden/void Problem Java Basics - Anfänger-Themen 6
S Probleme mit dem rückgabetyp void Java Basics - Anfänger-Themen 8
E Methoden public static void main(String[] args) Java Basics - Anfänger-Themen 9
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
D Compiler-Fehler void is an invalid type for the variable Java Basics - Anfänger-Themen 5
M Fragen zu Methoden (void/return), Übergabe von Parametern Java Basics - Anfänger-Themen 3
S Datentypen float statt void Java Basics - Anfänger-Themen 3
S Static void main <-> componentListener Java Basics - Anfänger-Themen 9
O Probleme mit void java.awt.Component.setBackground(Color c) Java Basics - Anfänger-Themen 2
T Hilfe bei void, int !? Java Basics - Anfänger-Themen 14
U void shift Java Basics - Anfänger-Themen 7
T Geht so was? public void verkaufe (<X implements Produkt& Java Basics - Anfänger-Themen 8
C public static void main(String[] args) Java Basics - Anfänger-Themen 6
D Frage zu public static void main. Java Basics - Anfänger-Themen 4
G Vor oder hinter public static void main. ? Java Basics - Anfänger-Themen 8
M 'void' type not allowed Java Basics - Anfänger-Themen 18
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
G Was ist public static void main(String[] args)? Java Basics - Anfänger-Themen 12
G <identifier> expected bei public void final Java Basics - Anfänger-Themen 3
H void not allowed? Java Basics - Anfänger-Themen 4
P Void-Aufrufe verursachen IO-Exceptions? Java Basics - Anfänger-Themen 4
T Von Main auf eine Variable in void zugreifen Java Basics - Anfänger-Themen 4
C public void keyPressed(KeyEvent e) Java Basics - Anfänger-Themen 2
N public void und verhalten bei return Java Basics - Anfänger-Themen 2
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
A die public static void main ? Java Basics - Anfänger-Themen 3
C Java-Anfang main void public? Java Basics - Anfänger-Themen 5
N public static void main(String args[]) Java Basics - Anfänger-Themen 6
G Warum eigentlich static void? Java Basics - Anfänger-Themen 3
F public final void getsignature() | anfänger Java Basics - Anfänger-Themen 7
P Was genau bedeutet "public static void main(String[] ar Java Basics - Anfänger-Themen 10
R void? static? beide? garnichtst von beiden? Java Basics - Anfänger-Themen 11
B Eine void innerhalb einer anderen void Java Basics - Anfänger-Themen 7
G in void verändern Java Basics - Anfänger-Themen 5
J public static void main? Java Basics - Anfänger-Themen 5
G public static void main(final String[] args) Java Basics - Anfänger-Themen 4
N public static void Java Basics - Anfänger-Themen 18
X Was genau heißt "public static void main(String[] args) Java Basics - Anfänger-Themen 4
B public static void main (String[] args) ??? Java Basics - Anfänger-Themen 2
G getParameter in public static void main Java Basics - Anfänger-Themen 3
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben