Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht?

Inceptor

Neues Mitglied
In meinem Code Beispiel befinden sich 2 Klassen, einmal TEST und TEST2. In beiden Klassen habe ich 2 Methoden definiert und der einen ein Array übergeben (a[ ]) und der anderen eine einfache integer Variable (a).

Von der Methode Methode lasse ich nun immer +15 rechnen und dann speicher ich das Ergebnis einmal im Array a auf Position [1] und einmal direkt in der Variable a.
Warum verhält es sich so, das bei Sysout dann für a[1] 30 rauskommt und bei Sysout2 für a immer noch nur 15?

Meine Frage ist Frage ist wohl schwierg zu verstehen, was an meiner laienhaften Ausdrucksweise liegen wird aber ich hoffe das ein erfahrener Java Entwickler mein Problem verstehen wird.

Vielen Dank für eine Antwort!
Mfg

[CODE lang="java" title="BeispielCode"]public class random{
public static void main(String[] args){
TEST OTEST = new TEST();
TEST2 OTEST2 = new TEST2();
}
}

public class TEST{
int a[] = new int[2];

TEST(){
Befullen();
Methode(a);
Sysout();
}

void Befullen(){
a[0] = 15;
}

void Methode(int x[]) {
x[1] = x[0] + 15;
}

void Sysout(){
System.out.println("a[1] = " + a[1]);
}
}

public class TEST2{
int a;

TEST2(){
Befullen2();
Methode2(a);
Sysout2();

}

void Befullen2(){
a=15;
}

void Methode2(int x) {
x = x + 15;
}

void Sysout2(){
System.out.println("a = " + a);
}
}[/CODE]
 
G

Gelöschtes Mitglied 65838

Gast
der aufruf ist call by value dh das was drin steht in dem ding wird rüber kopiert

in deinem Methode 2 kopierst du irgendeine zahl in x rein und diese veränderst ... hast du dadurch die außen verändert ? nein... du hast ja nur den inhalt kopiert

in der Mtehode(int x[]) kopierst du auch das rein was übergeben wird.. ja aber was steht denn in einem array drin ? da steht eine Referenz drin

diese Referenz zeigt jetzt auf den speicher, genauso wie die übergebene variable auf den gleichen speicher zeigt dh in dem moment zeigen a und x auf den gleichen speicher

wenn du jetzt an der stelle x[1] was änderst im speicher .. was passiert dann bei a ? weil a auf den gleichen speicher referenziert(synonym in java ist dazu "zeigt" aber referenz wird eher hergenommen) veränderst du die variable "außerhalb" gleich mit

ZUSATZINFO:
der fall mit dem kopieren und "außen änderst sich nix" kommt nur bei primitiven datentypen vor und irgendwas was ich bestimmt vergessen habe..
dafür gibts wrapper wie zb die klasse "Integer abc" .. die umgeht das ansich , die ist sozusagen ne box um einen integer rundum wenn du hier abc übergibst an eine methode die einen "method(Integer x)" akzeptiert, dann wird hier die referenz übergeben, wenn du dann den wert änderst wird es sich bei abc auch ändern


falls wieder ein "alles ist falsch kommt" ... erklärt es selber besser für jemanden der anfängt
 

Inceptor

Neues Mitglied
der aufruf ist call by value dh das was drin steht in dem ding wird rüber kopiert

in deinem Methode 2 kopierst du irgendeine zahl in x rein und diese veränderst ... hast du dadurch die außen verändert ? nein... du hast ja nur den inhalt kopiert

in der Mtehode(int x[]) kopierst du auch das rein was übergeben wird.. ja aber was steht denn in einem array drin ? da steht eine Referenz drin

diese Referenz zeigt jetzt auf den speicher, genauso wie die übergebene variable auf den gleichen speicher zeigt dh in dem moment zeigen a und x auf den gleichen speicher

wenn du jetzt an der stelle x[1] was änderst im speicher .. was passiert dann bei a ? weil a auf den gleichen speicher referenziert(synonym in java ist dazu "zeigt" aber referenz wird eher hergenommen) veränderst du die variable "außerhalb" gleich mit

ZUSATZINFO:
der fall mit dem kopieren und "außen änderst sich nix" kommt nur bei primitiven datentypen vor und irgendwas was ich bestimmt vergessen habe..
dafür gibts wrapper wie zb die klasse "Integer abc" .. die umgeht das ansich , die ist sozusagen ne box um einen integer rundum wenn du hier abc übergibst an eine methode die einen "method(Integer x)" akzeptiert, dann wird hier die referenz übergeben, wenn du dann den wert änderst wird es sich bei abc auch ändern


falls wieder ein "alles ist falsch kommt" ... erklärt es selber besser für jemanden der anfängt
Krass, danke für die schnelle Antwort, das macht sehr viel Sinn!

Richtig cool von dir, schönen Abend noch.
 

KonradN

Super-Moderator
Mitarbeiter
Zum Verständnis einfach einmal ein Beispiel mit Variablen := Papier.

Dann hast Du also verschiedene Dinge, die auf einem Papier stehen können:
- Die basis-Typen int, long, ... Das was da also in dr Variablen steht ist dann direkt der Wert. Value Types werden diese Typen daher genannt.
- Referenz Typen - da stehst dann auf dem Zettel nur, wo etwas zu finden ist. Also kannst Du Dir vorstellen wie eine Adresse. Das sind dann z.B. Arrays oder alles, was So mit den Klassen zu tun hat.

Und nun kann man sich den Aufruf vorstellen, wie ein Telefonanruf:
- Bei Int rufe ich jemanden an und schaue auf den Zettel, auf dem eine Zahl steht. Diese Zahl gebe ich dann durch und die wird auf der Anderen Seite auf einen Zettel geschrieben. Wenn jemand auf der anderen Seite nun die Zahl auf dem Zettel ersetzt durch eine andere Zahl, dann verändert sich ja nicht die Zahl, die auf meinem Zettel steht.
- Nun rufe ich an und gebe eine Referenz an. Das heisst, ich sage: Im Wohnzimmer in der Musterstraße 17 in Musterstadt steht ein Karton auf dem Tisch. Das schreibt man auf der anderen Seite nun auf. Und dann geht jemand hin und packt da in den Karton etwas. Dann ist ja klar: Wenn ich dann zu der Adresse auf meinem Zettel fahre und in den Karton schaue, dann finde ich auch die Veränderung.
Aber es ist auch nur eine Kopie der Adresse. Wenn jemand die Adresse verändert und da dann Schloßallee 24 steht, dann wäre auf meinem Zettel immer noch die alte Adresse.
 

KonradN

Super-Moderator
Mitarbeiter
ZUSATZINFO:
der fall mit dem kopieren und "außen änderst sich nix" kommt nur bei primitiven datentypen vor und irgendwas was ich bestimmt vergessen habe..
dafür gibts wrapper wie zb die klasse "Integer abc" .. die umgeht das ansich , die ist sozusagen ne box um einen integer rundum wenn du hier abc übergibst an eine methode die einen "method(Integer x)" akzeptiert, dann wird hier die referenz übergeben, wenn du dann den wert änderst wird es sich bei abc auch ändern
Das ist größtenteils zwar richtig beschrieben, aber du kannst den Wert eines Integer nicht ändern. Du kannst Du die Referenz durch eine neue Referenz ersetzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Wieso wird mein JFrame transparent dargestellt? Java Basics - Anfänger-Themen 5
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
H Wieso wird mir ein Fehler angezeigt? Java Basics - Anfänger-Themen 5
B Wieso wird die Zeile "column" genannt und die Spalte "line"? Java Basics - Anfänger-Themen 12
B Wieso wird hier so viel als falsch angezeigt? Java Basics - Anfänger-Themen 2
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
A Wieso wird immer 0 ausgegeben? Java Basics - Anfänger-Themen 4
T JTable wird nicht erzeugt, wieso? Java Basics - Anfänger-Themen 17
J Wert wird überschrieben, weiß nicht wieso Java Basics - Anfänger-Themen 2
K Wieso wird "paint" nicht ausgeführt ? Java Basics - Anfänger-Themen 2
P Wieso wird der komplette Inhalt im verzeichnis nicht gelösch Java Basics - Anfänger-Themen 5
G Wieso wird da nix angezeigt? Java Basics - Anfänger-Themen 9
S wieso wird nicht richtig geladen? Java Basics - Anfänger-Themen 11
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
C Objekt1.equals(Objekt2) = immer false. Wieso? Java Basics - Anfänger-Themen 22
A Wieso bekomme ich hier zwei unterschiedliche Ausgaben? Java Basics - Anfänger-Themen 6
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
H Datentypen 64 Bit passt in 32 Bit, wieso? Java Basics - Anfänger-Themen 9
L Input/Output Wieso kommt diese Ausgabe? Java Basics - Anfänger-Themen 12
H Wieso öffnet sich der Texteditor? Java Basics - Anfänger-Themen 6
G Wieso funktioniert dieses Programm nicht? Java Basics - Anfänger-Themen 6
B Wieso gibt er hier nur die ungeraden Zahlen aus? Java Basics - Anfänger-Themen 5
B Wieso gibt das Programm in der Console kein Ergebnis aus? Java Basics - Anfänger-Themen 2
A Wieso charAt(0) + charAt(3) = INT-Wert? Java Basics - Anfänger-Themen 5
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
P Cannot find symbol, wieso? Java Basics - Anfänger-Themen 5
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
T Wieso kann ich das jar file nicht starten? Java Basics - Anfänger-Themen 5
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
A Wieso übergibt der nicht die bearbeitete txt file Java Basics - Anfänger-Themen 8
Z Lotto-Programm Wieso klappt das? Java Basics - Anfänger-Themen 8
P Compiler-Fehler wieso zeigt der compiler ein else without if? Java Basics - Anfänger-Themen 3
S OOP Die Methode funktioniert, aber wieso? Java Basics - Anfänger-Themen 2
X Connection reset, wieso? Java Basics - Anfänger-Themen 4
T Objektorientierte Programmierung - Kein Plan wieso das nicht funktioniert! Java Basics - Anfänger-Themen 6
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
A Wieso kann ich nicht auf diese Variable zugreifen? Java Basics - Anfänger-Themen 6
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
A Wieso denn das??? Java Basics - Anfänger-Themen 2
A Wieso erscheinen die Objekte manchmal und manchmal nicht Java Basics - Anfänger-Themen 2
A Erste Schritte Wieso funktioniert diese Klasse nicht Java Basics - Anfänger-Themen 11
R Wieso funktioniert dieses Array nicht? Java Basics - Anfänger-Themen 13
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
X Stack mit Oberklasse, wieso funktioniert es nicht? Java Basics - Anfänger-Themen 8
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C Klassen Wieso kein infiniter Regress? Java Basics - Anfänger-Themen 4
M ArrayList - remove() löscht nicht! - weiß nicht wieso! Java Basics - Anfänger-Themen 8
X Wieso mehrere JRE ordner? Java Basics - Anfänger-Themen 8
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
R Wieso hat ein Konstruktor keinen Rückgabetyp? Java Basics - Anfänger-Themen 6
S JTable removeRow() IndexOutOfBounceException - wieso? Java Basics - Anfänger-Themen 3
S wieso Fehlermeldung cannot find symbol hier Java Basics - Anfänger-Themen 10
N NumberFormatException, aber wieso? Java Basics - Anfänger-Themen 5
E Wieso funktioniert Boolean.parseBoolean(s) nicht? Java Basics - Anfänger-Themen 9
T Wieso kompiliert das? Java Basics - Anfänger-Themen 7
B Erste Schritte Programm kompiliert nicht. Wieso? Java Basics - Anfänger-Themen 14
Luk10 Wieso bricht die Rekursion nicht ab? Java Basics - Anfänger-Themen 3
B Warnung : Dead Code. Aber wieso? Java Basics - Anfänger-Themen 10
W Compiler-Fehler NullPointerException. Aber wieso? Java Basics - Anfänger-Themen 2
C Conways Game of Life / "Waldbrandsimulation": wieso temporäres Hilfs-Array?! Java Basics - Anfänger-Themen 8
R If-Abfrage liefert false zurück, wieso ? Java Basics - Anfänger-Themen 20
K Methode funzt nicht, wieso? Java Basics - Anfänger-Themen 12
H Wieso ist das eine Endlosschleife? Java Basics - Anfänger-Themen 8
R wieso Nullpoint und was mit Events ? Java Basics - Anfänger-Themen 14
C Wieso funktioniert das Array nicht? Java Basics - Anfänger-Themen 10
R Wieso hänge ich hier in einer Endlosschleife (vermute ich zumindest)? Java Basics - Anfänger-Themen 2
M Wieso funktioniert dieser simple Code nicht? Java Basics - Anfänger-Themen 9
S wieso ist mein Code falsch? Java Basics - Anfänger-Themen 2
D array.toString() wieso funktioniert es nicht Java Basics - Anfänger-Themen 4
A Wieso terminiert das Programm nicht? Java Basics - Anfänger-Themen 4
B Wieso ein Fehler? illegal Starts of expression? Java Basics - Anfänger-Themen 12
radiac Wieso bekomme ich kein Bild drauf??? Java Basics - Anfänger-Themen 13
Hatebreed Keine Datenbankverbindung, wieso? (ClassNotFoundEscpetion) Java Basics - Anfänger-Themen 18
U Anfänger Frage - Ausgabe funktioniert nicht - Wieso? Java Basics - Anfänger-Themen 10
G Wieso enum Declaration nur außerhalb einer Methode möglich? Java Basics - Anfänger-Themen 9
S Wieso funtkioniert das SQL DELETE nicht? Java Basics - Anfänger-Themen 1
K Wieso schaltet meine CheckBox von selbst um ? Java Basics - Anfänger-Themen 31
fill0soph Wieso ist "Minus-Unendlich" == 1? Java Basics - Anfänger-Themen 4
G Wieso werdne die componentne nciht angezeigt Java Basics - Anfänger-Themen 4
B Primzahlen berechnen - Wieso unterschiedliche Java Basics - Anfänger-Themen 3
F Wieso java.lang.StackOverflowError (minimales programm) Java Basics - Anfänger-Themen 11
G Wieso eine nullpointerexception? Java Basics - Anfänger-Themen 6
G Wieso ist eine String-Übergabe keine by-reference-Zuweisung? Java Basics - Anfänger-Themen 7
K Wieso kommt ne NullPointerException Java Basics - Anfänger-Themen 3
N Wieso final ? Java Basics - Anfänger-Themen 4
H wieso syntax error bei else ? Java Basics - Anfänger-Themen 3
H wieso fehler ? must return a type of int. Java Basics - Anfänger-Themen 4
F Wieso werden Char-Werte wie Zahlen addiert? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen


Oben