1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[Java] Call-by-Reference?

  • Lacuno
  • 17. Dezember 2011 um 17:20
  • Unerledigt
  • Lacuno
    2
    Lacuno
    Mitglied
    Reaktionen
    2
    Punkte
    37
    Beiträge
    5
    • 17. Dezember 2011 um 17:20
    • #1

    Ich hab gerade im Internet gelesen, dass Java eigentlich kein Call-by-Reference beherrscht.

    Im Grunde ist das nur ein Call-by-Value Aufruf, da die Referenz nicht direkt in die aufrufende Methode übernommen wird. Die Referenz wird nur kopiert.
    Gibts da einen großen Unterschied? Schließlich kann ich ja mit der kopierten Referenz ebenfalls das Objekt am Heap bearbeiten und verändern.

    Quelle

  • gelbasack
    25
    gelbasack
    Mitglied
    Reaktionen
    90
    Punkte
    6.525
    Beiträge
    1.241
    • 17. Dezember 2011 um 18:02
    • #2

    Im Beispiel in der Quelle wird in C++ eine Referenz verwendet, das ist grob ausgedrückt ein dereferenzierter Pointer. Im Java-Beispiel wird eine Referenz verwendet. Bei der swap-Methode wird in C++ der dereferenzierte Wert getauscht, in Java die Referenz. Die Java-Referenz ist allerdings eher mit einem Pointer zu vergleichen, die Beispiele sind also nicht direkt vergleichbar. Das Java-Äquivalent zu dem C++-Beispiel würde in der Swap-Methode das übergebene Objekt modifizieren, nicht die Referenz.

    Der Argumentation in dem Beispiel kann ich nicht folgen, Java übergibt Referenzen.

  • Paulchen
    1
    Paulchen
    Gast
    • 17. Dezember 2011 um 18:21
    • #3

    Aus der Java Language Specification, Abschnitt 8.4.1

    Zitat

    When the method or constructor is invoked (§15.12), the values of the actual argument expressions initialize newly created parameter variables, each of the declared Type, before execution of the body of the method or constructor.

    D.h. bei nicht-primitiven Typen hast du in der aufgerufenen Methode neue Referenzen auf die übergebenen Objekte.

    Ohne Methodenaufruf entspricht das Folgendem:

    Code
    Integer i = 10;
    Integer j = 20;
    Integer k, l, m;
    
    
    /* Referenzen kopieren */
    k = i;
    l = j;
    
    
    /* Referenzen vertauschen */
    m = k;
    k = l;
    l = m;
    
    
    System.out.printf("%d %d\n", i, j); /* ergibt "10 20" */
    Alles anzeigen
  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung