Parameteruebergabe |
09.12.2014, 22:32 | Auf diesen Beitrag antworten » | |||||||
neuling96 | Parameteruebergabe Welche Ausgabe erzeugt das Programm? Begründen Sie Ihre Antwort ausführlich. Geben Sie Ihre Losung in einer Datei Parameteruebergabe.txt ab.
Fangen wir mit proberb(); an das liefert: Wer A sagt, muss auch B sagen! Also muss auch A sagen, wer B sagt? Problem habe ich hier swap(a, b); diese Methode ist def. und macht, aber wie setzte ich mein Programm das ein? Vermutung: swap(a, b); greift auf und liefert public static void swap(String s0, String s1) { String temp = s0; s0 = s1; s1 = temp; } die vertauschung von a und b dann wird auf proberb(); zugegriffen und liefert Wer A sagt, muss auch B sagen! Also muss auch A sagen, wer B sagt? soweit, richtig? |
|||||||
|
||||||||
10.12.2014, 14:29 | Auf diesen Beitrag antworten » | |||||||
eulerscheZahl | Es ist (finde ich) etwas wirr, deine Erklärung zu lesen. Die Ausgabe ist:
Die ersten beiden Blöcke hattest du ja schon, den 3. hast du nicht erwähnt. Bei swap(a, b) wird
aufgerufen. Hier werden zwar Strings vertauscht. Allerdings handelt es sich dabei um lokale Kopien, die nach Beenden der Funktion wieder weg sind. Wird ein Array übergeben, handelt es sich nicht um eine Kopie, sondern um einen Verweis auf das Array. (Grund ist der, dass sonst mitunter große Datenmengen kopiert werden müssten). Daher zeigt die Vertauschung hier auch Wirkung für den Rest des Programms. |
|||||||
10.12.2014, 16:09 | Auf diesen Beitrag antworten » | |||||||
neuling96 | mir wird einfach nicht klar wann man call by value und call by reference benutzt! in java ja i.d.r call by value, aber wann reference
was ist der Inhalt der variablen nach der Ausführung swap(x,y)? Call of value-> alles bleibt beim alten!? |
|||||||
10.12.2014, 16:24 | Auf diesen Beitrag antworten » | |||||||
eulerscheZahl | Da hast du dir gleich ein kompliziertes Beispiel rausgesucht: Bei Arrays wird die Adresse übergeben, wo im Speicher sie stehen. Die Adresse wiederum wird aber per-value übergeben. Ergo: wenn du b= a; schreibst, hat das nur Auswirkung auf die aktuelle Funktion. Das heißt zum einen, dass b nach der Funktion unverändert vorliegen wird (wir haben keine Speicheradresse mehr von b in spaw, können also nichts mehr reinschreiben). Zum anderen wird jetzt mit b[0] = 42 das geändert, was der Funktion als a übergeben wurde.
Allgemein gilt: Werte werden mit call-by-value übergeben. Arrays und Klassen werden mit call-by-reference übergeben, wobei die Reference selbst wiederum ein value ist, was heißt, dass du die reference nicht ändern kannst. |
|||||||
Anzeige | ||||||||
|
||||||||
10.12.2014, 17:30 | Auf diesen Beitrag antworten » | |||||||
neuling96 | kannst du bitte ein bsp/code geben für "Klassen werden mit call-by-reference übergeben" |
|||||||
10.12.2014, 17:38 | Auf diesen Beitrag antworten » | |||||||
eulerscheZahl |
Es wird eine Klasse als Funktionsargument übergeben. Wenn ein Wert in dieser Klasse geändert wird, so hat das auch Gültigkeit für die Funktion, in der die Variable erzeugt wurde. |
|||||||
10.12.2014, 18:37 | Auf diesen Beitrag antworten » | |||||||
neuling96 | danke |
|||||||
19.12.2014, 17:39 | Auf diesen Beitrag antworten » | |||||||
neuling96 |
irgendwie macht mir das noch zuschaffen folgendes habe ich im skript gelesen "Werden statische Variablen von einem Objekt verändert, ist diese Veränderung auch in allen anderen Objekten der gleichen Klasse sichtbar" d.h in diesem bsp würde die statsiche variable vom objekt- verändernd? |
|||||||
19.12.2014, 18:52 | Auf diesen Beitrag antworten » | |||||||
eulerscheZahl | Der zitierte Auszug handelt von einem anderen Thema:
du siehst: instanz2 hat die Variable geändert, aber instanz1 zeigt plötzlich ein anderes Ergebnis an. |
|