Call by ...

Status
Nicht offen für weitere Antworten.
Hier finde ich es ganz gut erklärt.

Wenn du ein einfacheres Beispiel brauchts , sag bescheid, grüße


Call by Value

Java:
private final double MWST = 1.19;
void bearbeiteArtikel(int i_nr, double d_Wert)
{
double d_ArtikelBrutto = d_Wert * MWST;
System.out.println("Artikel" + i_nr + "netto:" + d_Wert + "Brutto:" + d_ArtikelBrutto);
}
public static void main(String[]args)
{
bearbeiteArtikel(1, 12.90);
bearbeiteArtikel(2, 1.90);
}

Call by Reference

Java:
private final double MWST = 1.19;
void berechneBrutto(double d_Wert, double  rdOutWert)
{
rdOutWert = d_Wert * MWST;
}
public static void main(String[]args)
{
double dBrutto;
berechneBrutto(12.90, dBrutto);
System.out.println(dBrutto);
berechneBrutto(25.90, dBrutto);
System.out.println(dBrutto);
 
Zuletzt bearbeitet:
Auch auf die Gefahr hin, deine Hausaufgaben zu machen 😉

In Java gibt es NUR call by value. In C++ gibt es auch call by reference.

Ein Beispiel:
Code:
// Call by reference

void main()
{
    int a = 1;
    byReference(a);
    // Hier is a==2

    byValue(a);
    // Hier is immernoch a==2
}

void byReference(int &x) // Das & heißt call-by-reference
{
    // Hier is x==1
    x = 2;
}

void byValue(int x)
{
    // Hier is x==2
    x = 3;
}
 
call by value (primitive Datentypen, geclonte Objekte):
an eine methode wird eine kopie übergeben, und damit weitergearbeitet, also der ausgangswert verändert sich nicht!
bsp:
Java:
int x = 1;
methode(int x){ /* x wird verändert*/ }
// x außerhalb der methode ist immernoch 1, da in der methode nur mit ner kopie gearbeitet wird

call by reference (in java alle Objekte, nur keine primitiven Datentypen):
Java:
Object yxz = null;
methode(Object yxz){ /* Object yxz wird verändert*/ }
// xyz hat außerhalb der methode den wert, den es in der methode bekommen hat, weil in der methode auf einer referenz von xyz gearbeitet wird
 
Marco13 hat gesagt.:
In Java gibt es NUR call by value.
Also, ich hatte das eigentlich so gelernt, dass Java bei primitiven Datentypen mit Call by Value arbeitet, bei Objekten allerdings implizit mit Call by Reference. Oder irre ich mich da?
 
also meinst du, du arbeitest bei nem methodenaufruf mit einem übergebenen objekt mit ner kopie? oder streiten wir uns jetzt über die haarspalterei, das man der methode dann eine kopie der referenz übergibt? 🙂
 
Naja schon ^^

Wenn man Object a = "null";

Und wenn ich nun a übergebe an eine Methode , wird doch meine Referenz übergeben.
call by reference ...so habe ich es auch gelernt , egal wie , man machts ja schon automatisch^^
 
Ja, eine Kopie der Referenz wird "by-value" übergeben. Das ist kein Call-by-Reference.
 
ja @tfa, aber es hat den selben effekt 🙂 eine referenz auf das objekt eben 🙂 auch wenns nur ne kopie der eigentlichen referenz ist! 😀
 
Call-by-Reference ist aber was völlig anderes. Siehe das C-Beispiel oben. Das gibt es in Java nicht.
 
also meinst du, du arbeitest bei nem methodenaufruf mit einem übergebenen objekt mit ner kopie? oder streiten wir uns jetzt über die haarspalterei, das man der methode dann eine kopie der referenz übergibt? 🙂
Es gibt in Java keinen Call-By-Rerefence, wurdfe doch schon gesagt.
Die Tatsache dass du in Java keine Objekte übergibst sondern nur Referenzen ändert da nix daran.
 
Hat es nicht. Bei Call-By-Reference würde ich der externen Referenz innerhalb der Methode einen neuen Wert zuweisen können, kann ich bei Java aber nicht!

Java:
public class Foo {
    public static void main(String[] args) {
        Foo foo = new Foo();
        bar(foo);
        System.out.println(foo != null); // <= true!!!
    }
 
    public static void bar(Foo foo) {
        foo = null;
    }
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben