Dieser Java-Code:
public class XYZ {
public static void main(){
int toyNumber = 5;
XYZ temp = new XYZ();
temp.spielen(toyNumber);
System.out.println("Spielzeugnummer in main " + toyNumber);
}
void spielen(int toyNumber){
System.out.println("Spielzeugnummer im Spiel " + toyNumber);
toyNumber++;
System.out.println("Spielzeugnummer im Spiel nach Inkrementierung " + toyNumber);
}
}
wird folgendes ausgeben:
Spielzeugnummer im Spiel 5
Spielzeugnummer im Spiel nach Inkrementierung 6
Spielzeugnummer in main 5
In C++ kann ich die toyNumber
-Variable als Referenzübergabe übergeben, um Schattenbildung zu vermeiden, d.h. eine Kopie derselben Variable zu erstellen, wie unten gezeigt:
void main(){
int toyNumber = 5;
spielen(toyNumber);
cout << "Spielzeugnummer in main " << toyNumber << endl;
}
void spielen(int &toyNumber){
cout << "Spielzeugnummer im Spiel " << toyNumber << endl;
toyNumber++;
cout << "Spielzeugnummer im Spiel nach Inkrementierung " << toyNumber << endl;
}
und die Ausgabe in C++ wird sein:
Spielzeugnummer im Spiel 5
Spielzeugnummer im Spiel nach Inkrementierung 6
Spielzeugnummer in main 6
Meine Frage ist - Was ist der äquivalente Code in Java, um die gleiche Ausgabe wie der C++-Code zu erhalten, unter der Voraussetzung, dass Java pass-by-value anstelle von pass-by-reference ist?
26 Stimmen
Das scheint für mich nicht wie ein Duplikat - die angeblich duplizierte Frage behandelt, wie Java funktioniert und was die Begriffe bedeuten, was Bildung ist, während diese Frage speziell danach fragt, wie man ein Verhalten erhält, das dem Referenzwertähnelt, etwas, was viele C/C++/D/Ada-Programmierer sich fragen könnten, um praktische Arbeit zu erledigen, ohne sich darum zu kümmern, warum Java alles nach Wert übermittelt.
1 Stimmen
@DarenW Ich stimme vollkommen zu - habe für die Wiedereröffnung gestimmt. Oh, und du hast genug Reputation, um dasselbe zu tun :-)
0 Stimmen
Die Diskussion um Primitivtypen ist eher irreführend, da sich die Frage gleichermaßen auf Referenzwerte bezieht.
0 Stimmen
"In C++ kann ich die Variable toyNumber als Verweisparameter übergeben, um Schattierung zu vermeiden" - das ist keine Schattierung, weil die
toyNumber
-Variable, die in der Methodemain
deklariert ist, in der Methodeplay
nicht im Scope ist. Schattierung tritt in C++ und Java nur auf, wenn es eine Verschachtelung von Scopes gibt. Siehe de.wikipedia.org/wiki/Schattierung_(Informatik).