Hallo zusammen,
ich habe eine Frage zu call by reference und JAVA, da ich das noch nicht so ganz verstanden habe:
Bei C++ wird das call by reference z.B. so abgewickelt:
Im Internet hab ich schon gelesen, dass so etwas bei JAVA mit primitiven Datentyp nicht abgewickelt werden kann. Gibt es dann gar keine andere Möglichkeit? Was mir als einiziges einfällt ist Verwendung von Wrapper Klassen (aber ich denke bei Wrapper Klassen kann man die Werte auch nicht so leicht ändern, da sie die Sichtbarkeit "final" haben?:
Wie funktioniert das denn dann genau bei JAVA?:
Laut Internet gibt es bei JAVA nur "call by value"?
Aber wenn ich bei Objekten die Werte übergebe, wie können dann die werte geändert werden?
Ich habe dazu folgenden Text gefunden:
"Objektvariablen sind Referenzen, also Zeiger. Zwar werden sie auch bei der Übergabe an eine Methode per Wert übergeben. (call by value) Da innerhalb der Methode aber der Zeiger auf das Originalobjekt zur Verfügung steht (wenn auch in kopierter Form) wirken sich die Veränderungen an dem Objekt natürlich direkt auf das Originalobjekt aus und sind somit für den Aufrufer der Methode sichtbar. Wie in allen anderen Programmiersprachen entspricht die call by value - Übergabe eines Zeigers damit natürlich genau der Semantik von call by reference.
Kann mir das vielleicht jemand einfach erklären?
Danke
Viele Grüße!
ich habe eine Frage zu call by reference und JAVA, da ich das noch nicht so ganz verstanden habe:
Bei C++ wird das call by reference z.B. so abgewickelt:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int f [4];
int a = 0, b = 1;
void wechsel (int*, int*);
cout << "Vorher: " << a << ", " << b << endl;
wechsel (&a, &b); //call by reference
cout << "Nacher: " << a << " , " << b << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
void wechsel (int *a, int *b) {
int h;
h = *a;
*a = *b;
*b = h;
cout << "Wechsel: " << *a << " , " << *b << endl;
}
Im Internet hab ich schon gelesen, dass so etwas bei JAVA mit primitiven Datentyp nicht abgewickelt werden kann. Gibt es dann gar keine andere Möglichkeit? Was mir als einiziges einfällt ist Verwendung von Wrapper Klassen (aber ich denke bei Wrapper Klassen kann man die Werte auch nicht so leicht ändern, da sie die Sichtbarkeit "final" haben?:
Java:
int i = 12;
Integer io = new Integer( i );
io = new Integer( io.intValue() + 1 );
i = io.intValue();
Wie funktioniert das denn dann genau bei JAVA?:
Laut Internet gibt es bei JAVA nur "call by value"?
Aber wenn ich bei Objekten die Werte übergebe, wie können dann die werte geändert werden?
Ich habe dazu folgenden Text gefunden:
"Objektvariablen sind Referenzen, also Zeiger. Zwar werden sie auch bei der Übergabe an eine Methode per Wert übergeben. (call by value) Da innerhalb der Methode aber der Zeiger auf das Originalobjekt zur Verfügung steht (wenn auch in kopierter Form) wirken sich die Veränderungen an dem Objekt natürlich direkt auf das Originalobjekt aus und sind somit für den Aufrufer der Methode sichtbar. Wie in allen anderen Programmiersprachen entspricht die call by value - Übergabe eines Zeigers damit natürlich genau der Semantik von call by reference.
Kann mir das vielleicht jemand einfach erklären?
Danke
Viele Grüße!