Wieso ist eine String-Übergabe keine by-reference-Zuweisung?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi!

Wenn ich etwas in der Art habe:

Code:
void A() {
String test = "a";
B(test);
System.out.println(test); // wieso ist test.equals("a"), und nicht test.equals("b")???
}

void B(String var) {
var = "b";
}

Wieso enthält dann nach Aufruf der B-Methode die Variable test nicht "b"? Denn da String ja ein Objekt ist und kein primitiver Datentyp, müsste die Variable var doch ein Zeiger auf die Variable test sein und somit müsste, wenn var="b" gesetzt wird, test auch "b" enthalten- oder? Wo ist mein Denkfehler?
 
R

raiL

Top Contributor
weil die referenz kopiert wird, anfangs aber auf das gleiche objekt zeigt bzw nach B nicht mehr
 
G

Guest

Gast
Danke schonmal, aber kannst du mir vielleicht sagen, in welcher Zeile was passiert? Ich verstehe auch noch nicht, weshalb das Verhalten wie beschrieben ist, obwohl du ja schreibst, dass die Variablen "auf das gleiche objekt" zeigen?!
 
L

Leroy42

Top Contributor
Richtig! Und nach der Zuweisung
Code:
var = "b";
zeigt das lokale var von "B" eben auf "b"
 
G

Guest

Gast
Ist es dann auch möglich, dieses Verhalten so abzuändern, dass in meinem Beispiel test am Ende wirklich "b" enthält? Also, ohne die B-Methode zur Funktion umzugestalten und ohne die Sichtbarkeit von test zu erweitern.

Verstehe ich es dann ferner richtig, dass das hier einen Effekt auf das Ursprungs-Objekt "meineklasse" hat...
Code:
// in Klasse C1
private MeineKlasse meineklasse = new MeineKlasse(); // <- das "Ursprungs-Objekt"
public MeineKlasse getMeineKlasse() {
return meineklasse;
}

// in Klasse C2
void TuWas() {
getMeineKlasse().ÄnderEinenWert(); // <- das "Ursprungs-Objekt" wird direkt verändert, richtig?
}
...die folgende Variante aber das Ursprungsobjekt unangetastet lässt, aus selbigem Grund wie von euch beschrieben:
Code:
// in Klasse C1
public MeineKlasse getMeineKlasse() {
return meineklasse;
}

// in Klasse C2
void TuWas() {
MeineKlasse eineKopie = getMeineKlasse();
eineKopie.ÄnderEinenWert(); // <- das Ursprungsobjekt  bleibt unangetastet- richtig?
}
 
R

raiL

Top Contributor
nö... es wird die referenz kopiert nicht das objekt
=> beide zeigen aufs gleiche
 
J

JavaFred

Aktives Mitglied
Anonymous hat gesagt.:
Ist es dann auch möglich, dieses Verhalten so abzuändern, dass in meinem Beispiel test am Ende wirklich "b" enthält?
Nein. Java ist call by value. Du kannst keine Variablen ändern, die Du als Parameter übergibst, weil nur deren Werte kopiert werden und nicht die Variablen selbst.
 
kowa

kowa

Aktives Mitglied
Du kannst höchstens Methode B (aus Ursprungscode) einen Wert zurückgeben lassen, also mit "return" und den String test damit gleichsetzten:

Code:
void A() {

String test = "a";
test = B(test);
System.out.println(test); 

}

public String B (String var)
{

var = "b";

return var;

}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
H Wieso ist das eine Endlosschleife? Java Basics - Anfänger-Themen 8
G Wieso eine nullpointerexception? Java Basics - Anfänger-Themen 6
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
H Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
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 wird mir ein Fehler angezeigt? Java Basics - Anfänger-Themen 5
H Wieso öffnet sich der Texteditor? Java Basics - Anfänger-Themen 6
ChrisPL4Y Wieso funktioniert dieses Programm nicht? Java Basics - Anfänger-Themen 6
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
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
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
T Wieso kann ich das jar file nicht starten? Java Basics - Anfänger-Themen 5
S Wieso wird mein JFrame transparent dargestellt? 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
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
A Wieso wird immer 0 ausgegeben? Java Basics - Anfänger-Themen 4
R Wieso hat ein Konstruktor keinen Rückgabetyp? Java Basics - Anfänger-Themen 6
T JTable wird nicht erzeugt, wieso? Java Basics - Anfänger-Themen 17
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
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
J Wert wird überschrieben, weiß nicht wieso Java Basics - Anfänger-Themen 2
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
K Wieso wird "paint" nicht ausgeführt ? Java Basics - Anfänger-Themen 2
F Wieso java.lang.StackOverflowError (minimales programm) Java Basics - Anfänger-Themen 11
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
M Wieso zeichnet es nicht auf den JPanel Java Basics - Anfänger-Themen 7
V Wieso NullPointerException Java Basics - Anfänger-Themen 7
M Wieso finden andere nicht die main .class Java Basics - Anfänger-Themen 20
ven000m Wieso antwortet mein Server nicht mehr (Socket Anwendung) Java Basics - Anfänger-Themen 2
V Wie und wieso geht dieser Methodenaufruf? Java Basics - Anfänger-Themen 2
G Hilfe, wieso funzt das net? Java Basics - Anfänger-Themen 18
P Wieso kommt die Fehlermeldung ".class expected"? Java Basics - Anfänger-Themen 2
S java.lang.ArrayIndexOutOfBoundsException: 5 nur wieso? Java Basics - Anfänger-Themen 2
M wieso fehler das array nicht iniziiert obwohl es iniziiert Java Basics - Anfänger-Themen 3
P Wieso wird der komplette Inhalt im verzeichnis nicht gelösch Java Basics - Anfänger-Themen 5
philipp Wieso kann man nicht dividieren? Java Basics - Anfänger-Themen 11
G Wieso brauch java keine main() Methode? Java Basics - Anfänger-Themen 20
L Wieso 2 JREs ? Java Basics - Anfänger-Themen 7
D NullPointerException wieso? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben