Warum ist das keine Referenzkopie mehr?

berserkerdq2

Bekanntes Mitglied
Wenn ich einen Array int[] habe und ich erstelle einen zweiten int[] array, den zweiten int[]array füge ich dei hälfte vom ersten array hijnzu, mit schleifen, also richtige kopie.

Dann mache ich ersterarray=zweiterarray, warum wurde dann ersterarray ersetzt und nicht referenzen oder? Dachte mit = wären bei Arrays nur referenzen etc.
 
M

Mart

Gast
kommt drauf an wo du gerade bist... wahrscheinlich ist es ein typisches Call by Value Problem
 

Neumi5694

Top Contributor
array1 speichert eine Referenz auf ein Array(1).
array2 speichert ebenfalls eine Referenz auf ein Array(2).
Nach array1 = array2 steht in beiden Variablen eine Referenz auf das selbe Array(2). Sofern keine weiteren Variablen im Einsatz sind, speichert danach niemand mehr eine Referenz auf Array(1) und es wird vom garbage collector gelöscht.
 
K

kneitzel

Gast
zeigt die Variable ersterarray auf das zweiterarray. Das Array ersterarray ist somit nicht mehr referenziert.
Die variable erstesarray zeigt nicht auf zweitearray. Beide Arrays haben eine Referenz (und zeigen damit) auf das selbe Array. Wichtig ist: Es gibt in Java keine Referenzen auf Variablen! Eine Variable kann nie auf eine andere Variable zeigen oder diese referenzieren! Hier immer gut aufpassen.

Der Unterschied ist halt, dass man nach einem erstesArray = zweitesArray dem zweitesArray etwas Neues zuweisen kann und das verändert erstesArray nicht mehr!
 
K

kneitzel

Gast
Zumindest war Deine Aussage missverständlich (in meinen Augen). Das ist an meiner Antwort auf Dein Post dann auch deutlich zu erkennen.
Doch das besagt die Zuweisung.
Natürlich nicht! Die Zuweisung erstesarray = zweitesarray besagt nicht, dass erstesarray auf zweitesarray zeigt. Dass Du dies wiederholst, zeigt, dass Du es schlicht nicht verstanden hast.

Durch diese Zuweisung enthält erstesarray die Referenz aus zweitesarray. Das ist eben explizit nicht "erstesarray zeigt auf zweitesarray". Diese Aussage würde bedeuten, dass die Variable erstesarary auf die Variable zweitesarray zeigen würde - etwas, das Du angeblich nicht behauptest.

In Java sind so Ungenauigkeiten leicht zu verzeihen. Das führt maximal zu Missverständnissen. Aber andere Sprachen wie z.B. c++ bieten eben entsprechende Referenzen und Zeiger.

Aber damit ist das Thema für mich gegessen. Du kanmnst das gerne so sehen, wie Du willst. Meine Sichtweise habe ich deutlich gemacht und mehr wollte ich nicht.
 

me-ton

Mitglied
Dass Du dies wiederholst, zeigt, dass Du es schlicht nicht verstanden hast.
Kannst du den Mund nicht ganz so voll nehmen, und Richtiges nicht falsch darstellen?

Eine Variable hat einen Namen und einen Inhalt. Der Name ist ersterarray und der Inhalt ist der Inhalt von zweiterarray. Ich weiß nicht was es da noch zu diskutieren gibt.

Also einfach Beleidigungen sein lassen und versuchen in der Sache zu argumentieren, falls möglich.
 
M

Mart

Gast
Eine Variable hat einen Namen und einen Inhalt. Der Name ist ersterarray und der Inhalt ist der Inhalt von zweiterarray. Ich weiß nicht was es da noch zu diskutieren gibt.
was gibts da noch zu diskutieren ? stimmt gar nichts, weil es wieder falsch ist... es steht in erstearray die REFERENZ nach der zuweisung und diese REFERENZ zeigt auf den INHALT der irgendwo im speicher wursschtelt aber du hast es schon 2 mal falsch geschrieben jetzt und irgendwann müsstest du mal die grundlagen halbwegs verstanden haben
 

mihe7

Top Contributor
stimmt gar nichts, weil es wieder falsch ist...
Doch, die Aussage war schon richtig. Falsch war nur die Aussage, dass erstesarray auf zweitesarray verweisen würde.

Nö, zweiterarray ist ein Array.
zweitesarray steht für einen Speicherbereich, der die Adresse eines Arrays enthält. Würde erstesarray auf zweitesarray verweisen, dann würde in erstesarray die Adresse der Variablen zweitesarray stehen. Die Zuweisung sorgt aber dafür, dass der Inhalt von zweitesarray (=die Adresse des Arrays) nach erstesarray kopiert wird.
 

mihe7

Top Contributor

me-ton

Mitglied
Nach
zeigt die Variable ersterarray auf das zweiterarray. Das Array ersterarray ist somit nicht mehr referenziert.
Da war keine Ungenauigkeit. Den zweiten Satz hast du und kneitzel entweder nicht gelesen oder nicht verstanden. Für beides kann ich nichts.

Es ist auch immer problematisch, einzelne Sätze aus dem Kontext zu ziehen und dann von so etwas wie "Ungenauigkeit" zu sprechen.
 
K

kneitzel

Gast
Es ist auch immer problematisch, einzelne Sätze aus dem Kontext zu ziehen und dann von so etwas wie "Ungenauigkeit" zu sprechen.
Also da möchte ich nur einmal fragen: Dir ist bewusst, dass Du - bezüglich dieser einen konkreten Aussage - mehrfach behauptet hast, dass diese richtig sein soll.

Und welchen Kontext meinst Du?
- Die Aussage, dass das erstesarray nicht mehr referenziert wird? Das ist natürlich auch extrem ungenau. Zum einen ist erstesArray auch eine Variable und kann nicht referenziert werden(Den Punkt hatten wir ja schon) und zum anderen ist es ungenau, weil Du natürlich sagen musst, dass das Array, auf das erstesArray referenziert hat, nun von den beiden betrachteten Variablen nicht mehr referenziert wird. Dass es gar nicht mehr referenziert wird, kann man - wenn man den ganzen Kontext nicht kennt, natürlich nicht sagen.
- Die Aussage bezüglich Gen Sequenzen und das manche dies nicht lösen können? Also mal von massiven Gen Defekten abgesehen ist dies nur eine Ausrede. Schulen mit Informatik Pflichtfach zeigen ja, dass diese einfachen Grundlagen jeder verstehen kann. Es gibt natürlich Schüler, denen es leicht fällt und Schüler, denen es schwer fällt. Daher auch hier: Vermutlich eine Ungenauigkeit (Du meinst, dass es manchen schwerer fällt) oder enfach mal wieder ein Problem, Texte zu verstehen. Hier wäre es übrigens sehr sinnvoll gewesen, wenn Quellen genannt worden wären. (Und nein, ein "Such doch selbst" ist eben kein Argument. Es kommt eine These von dir und die sollte man eigentlich untermauern mit Argumenten oder Quellen.)

Generell ist dieses HickHack totaler Unsinn! Du hast eine Aussage gemacht, die ich schlicht ergänzt habe. Da hättest Du von mir aus schreiben können "Nichts anderes meinte ich" oder so. Aber Du fängst hier eine Diskussion an von wegen
Kannst du den Mund nicht ganz so voll nehmen, und Richtiges nicht falsch darstellen?

Das ist einfach unnötig und führt zu nichts. Als ob man sein Gesicht bei sowas verlieren würde. Ich werde auch oft genug korrigiert oder Aussagen verbessert. Forum ist nun einmal keine Wissenschaftliche Arbeit (Und auch da ist eine Korrektur / Kritik nichts schlimmes. Dazu dienen dann z.B. Vorveröffentlichungen. Neben dem frühzeitigen Teilen eigener Erkenntnisse ist ein wichtiger Punkt: Kritik bekommen um das Dokument noch verbessern zu können. Das ist übrigens ein wichtiger Unterschied zu den Veröffentlichungen von z.B. einem Drosten zu diversen anderen Aussagen irgendwelcher Schwurbler. Corona-Demos, YouTube und Facebook (incl.Twitter und co) sind eben keine wissenschaftlichen Plattformen.

Aber wieder viel zu viel geschrieben für vermutlich nichts und wieder nichts, denn eine EInsicht wird von Dir bestimmt ebenso wenig kommen wir Argumente zu Deinen Thesen.
 

Hag2bard

Bekanntes Mitglied
Jetzt habt ihr mich aber auch verwirrt :D
int[] arrVar1;
arrVar1 = new int[12];
Die Variable arrVar1 mit dem Typ int[] wird initialisiert.
Der Variable arrVar1 wird ein Speicherbereich zugewiesen (eine Adresse die vor das erste int Element zeigt.

int[] arrVar2 = new int[15];
Eine neue int[] Variable wird erstellt mit einer neuen Adresse (Zeiger auf vor das erste int Element).

arrVar1 = arrVar2;

Der arrVar1 wird die Adresse der arrVar2 zugewiesen. Der vorherige Speicherbereich auf den arrVar1 zeigte wird freigegeben.

Sind die Aussagen so 100% korrekt?
 
K

kneitzel

Gast
int[] arrVar1;
arrVar1 = new int[12];
Die Variable arrVar1 mit dem Typ int[] wird initialisiert.
Der Variable arrVar1 wird ein Speicherbereich zugewiesen (eine Adresse die vor das erste int Element zeigt.
Nein, der Variablen wird kein Speicherplatz zugewiesen. Bei new int[12] wird im Speicher ein Objekt erstellt, welches eine int Array mit 12 Plätzen entspricht. Wie das genau aufgebaut ist, ist dabei irrelevant und kann von Implementation zu Implementation unterschiedlich sein.
Die Variable selbst bekommt lediglich die Referenz zugewiesen.
int[] arrVar2 = new int[15];
Eine neue int[] Variable wird erstellt mit einer neuen Adresse (Zeiger auf vor das erste int Element).
Nein, wieder keine Adresse sondern wie auch schon oben: Eine Referenz. Und wieder gilt: Was intern genau gemacht wird, ist erst einmal egal. Es ist Sache der konkreten Implementation. Es ist nicht einfach ein Zeiger auf das erste Element. Es ist eine Referenz auf eine Instanz. Das kannst Du auch im Code etwas nachvollziehen, denn wie alle Instanzen muss da von Object geerbt werden und somit kannst Du auf dem Array getClass() und so aufrufen.
(Das ist übrigens einer der Punkte, die nicht ganz konsistent sind. Eine Klasse "[int" gibt es ja nicht im Framework wenn man nach der Dokumentation geht.).
arrVar1 = arrVar2;
Der arrVar1 wird die Adresse der arrVar2 zugewiesen. Der vorherige Speicherbereich auf den arrVar1 zeigte wird freigegeben.
Nein. Es wird der Wert, der in arrVar2 ist, in arrVar1 kopiert. Die Referenz ist wie jeder andere Wert auch. Ersetze also Adresse mit Referenz, wenn Du exakt sein willst. Und dann ist es nicht die Referenz der arrVar2 sondern due Referenz aus arrVar2. Die Adresse von irgendwas ist in Java nicht zu bekommen. (Die üblichen Implementationen von Object geben beim HashCode die Speicheradresse aus. Aber das wieder eine Sache der konkreten Implementation und damit nichts, das in Java so festgelegt wäre!)

Sind die Aussagen so 100% korrekt?
Dein Verständnis dürfte richtig sein (wäre meine Vermutung), aber die Aussagen sind so leider nicht 100% korrekt. Alleine schon, weil Worte verwendet werden, die in Java eben keinen Sinn machen. Adresse einer Variablen oder eines Objektes sind aus Java Sicht irrelevant und bei der Beschreibung von Java Elementen können diese schlicht nicht vorkommen (so es 100% korrekt sein soll).
 

Neumi5694

Top Contributor
Edit: nvm, wir drehen uns hier im Kreis, damit jemand Ungenanntes nicht zugeben muss, falsch gelegen zu haben, was Referenzen angeht.

@me-ton Könntest du bitte auf die genannte Gen-Untersuchung verlinken? Das würde ich gerne selbst nachlesen. Klingt nach spannendem Lesestoff.
 
M

Mart

Gast
eine "Adresse" bzw speicher adresse ist eine speicherzeile in deinem PC ram hardware oder ähnliches

wenn du dir jemals eine Referenz ausgegeben hast ( was ich nicht denke ) würdest du merken dass
"Klasse@12345" nicht einer speicher adresse entspricht wie man sie von c,c++ und c# kennt wo man zb ein bit in exakt dieser adresse flippen kann... zumindest ist da das zeug was for dem @ steht auch noch da deswegen bist du auch nicht "100%" korrekt


du kannst behaupten dass Referenzen Zeiger sind nach dem ILS8 standard aber adresse und zeiger ist ja wieder was anderes ;)
Java:
JLS 8
    4.3.1 Objects
    An object is a class instance or an array.
    The reference values (often just references) are pointers to these objects
 
K

kneitzel

Gast
du kannst behaupten dass Referenzen Zeiger sind nach dem ILS8 standard aber adresse und zeiger ist ja wieder was anderes ;)
Ich finde den Beitrag nicht, aber dazu hatten wir auch schon einmal eine kleine Ausführung, bei der ich die ILS und die benutzten Wörter (speziell Pointer) im Detail betrachtet hatte. Aber vielleicht findest Du diesbezüglich in der Forensuche mehr wie ich.

An object is a class instance or an array.
Das ist übrigens (hatte ich wohl schon erwähnt) eine der Ungereimtheiten. Arrays sind Objekte und doch wieder keine Objekte. Sie werden regelmäßig separat genannt aber dennoch ist ein array auch ein Object.

The reference values (often just references) are pointers to these objects
Bezüglich der Wortwahl: Diverse Dinge haben klare Begriffe. Und diese Begriffe sollten wir verwenden. So hat Java Methoden und keine Prozeduren und Funktionen. Wenn man etwas schreibt, dann sollte man im Java Bereich auch die dort üblichen Begriffe verwenden. Bei Erläuterungen tauchen dann aber teilweise andere Begriffe mit auf. Aber Pointer gibt es in der ganzen JLS 4 mal oder so. (Vielleicht erinnere ich mich falsch. Mal das PDF durchsuchen und zählen :) )

Aber unabhängig von der Wortwahl (Um die ging es nur zweitrangig): Die Aussage muss man natürlich richtig lesen aber das hatten wir ja nun schon zur Genüge hier im Thread :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Keine richtige Doku Java Basics - Anfänger-Themen 5
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
G Endlosschleife keine Rückgabe Java Basics - Anfänger-Themen 36
Nooobi Regex und .matches() geben keine Ausnahme Java Basics - Anfänger-Themen 10
O Java 17 keine Pflicht um Exceptiones zu behandeln? Java Basics - Anfänger-Themen 2
nbergmann Installation unter jdk.java.net: Keine ZIP-Datei zum entpacken Java Basics - Anfänger-Themen 2
M Eclipse kennt keine String Klasse mehr Java Basics - Anfänger-Themen 1
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
M Keine Ausführung von System.out.println() Java Basics - Anfänger-Themen 3
H Warum kann man keine Parameter in die main-Methode packen? Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
A keine Ergebnisse - String nummer in array nummer converting Java Basics - Anfänger-Themen 1
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
B Ich kann keine Hühner töten Java Basics - Anfänger-Themen 49
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
B Keine Ausgabe .. Woran liegt das? Ich komme nicht weiter Java Basics - Anfänger-Themen 14
T Bei mir wird keine javac angezeigt sondern nur javacpl Java Basics - Anfänger-Themen 2
R Keine Verbindung mit MariaDB Java Basics - Anfänger-Themen 18
O Input/Output newbile und keine Ahnung! Java Basics - Anfänger-Themen 16
S Kann keine Bilder laden? Java Basics - Anfänger-Themen 9
C Problem: PC ohne Internet und keine Möglichkeit Programme zu laden Java Basics - Anfänger-Themen 5
Bun17 Keine Ausgabe in der Konsole Java Basics - Anfänger-Themen 2
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
D jsoup.select findet keine elemente Java Basics - Anfänger-Themen 2
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
W Was bedeutet im Struktogramm „zufall“ aufrufen (keine Parameterübergabe)? Java Basics - Anfänger-Themen 8
T Keine Ahnung vom Programieren Java Basics - Anfänger-Themen 28
A SelectionSort bringt keine konstanten Ergebnisse Java Basics - Anfänger-Themen 4
J RPN Taschenrechner - keine Lösung!! Java Basics - Anfänger-Themen 84
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
C Keine javac.exe in bin-Datei Java Basics - Anfänger-Themen 3
A Vollkommene Zahlen: Findet keine Einzige Java Basics - Anfänger-Themen 9
J Input/Output javac HelloWorld.java - Keine Textausgabe in der Konsole Java Basics - Anfänger-Themen 4
H JDK installieren keine Installationsroutine bei Javainstallation sichtbar Java Basics - Anfänger-Themen 4
H Buttons zeigen keine Reaktion Java Basics - Anfänger-Themen 6
I Programm von mir - keine Ahnung mehr ob richtig falsch:-( Java Basics - Anfänger-Themen 6
D Datentypen Datentyperstellung | Kompiler sagt Syntax Error doch ich find keine Lösung Java Basics - Anfänger-Themen 2
snipesss IDE zeigt keine Fehler an, Programm wird jedoch nicht ausgeführt. Java Basics - Anfänger-Themen 18
Khorgoroth Erste Schritte Keine Ausgabe Java Basics - Anfänger-Themen 2
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
Z AWT package -> keine Konsole? Java Basics - Anfänger-Themen 2
Henri keine Ausgabe Java Basics - Anfänger-Themen 5
J TableView zeigt keine Daten an Java Basics - Anfänger-Themen 14
C Java stellt unter Windows keine Umlaute dar Java Basics - Anfänger-Themen 9
A Keine Konsolenausgabe Java Basics - Anfänger-Themen 5
D Methoden Filewriter macht keine Zeilenumbrüche Java Basics - Anfänger-Themen 3
D Compiler-Fehler NullPointerExeption aber Ecplise zeigt keine Fehler an?! Java Basics - Anfänger-Themen 8
D addActionListener zeigt keine Wirkung Java Basics - Anfänger-Themen 8
S Warum erlaubt ein while-Loop keine Variablen-Declaration wie der for-Loop..? Java Basics - Anfänger-Themen 6
M Lottozahlen 6 aus 49 keine doppelten Java Basics - Anfänger-Themen 5
D Keine Ausgabe in meinem Helden Programm Java Basics - Anfänger-Themen 2
M Keine Ausgabe Java Basics - Anfänger-Themen 4
C PrintWriter schreibt keine in Strings enthaltenen Zeilenumbrüche Java Basics - Anfänger-Themen 9
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
J Rückgabe als Wert, keine Referenz Java Basics - Anfänger-Themen 3
K Keine doppelten Zufallszahlen im Array Java Basics - Anfänger-Themen 17
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
1 Mini Programm, keine Eingabe möglich.. Java Basics - Anfänger-Themen 6
P Wiedereinstieg und kann keine Dateien mehr öffnen... Java Basics - Anfänger-Themen 13
R Keine doppelten Zufallszahlen Java Basics - Anfänger-Themen 2
T Buffererwriter keine Exception obwohl Client weg Java Basics - Anfänger-Themen 2
D Java Eclipse hat scheinbar keine library Java Basics - Anfänger-Themen 2
M Keine Datenbank verbindung Java Basics - Anfänger-Themen 14
E Keine Ausgabe der Konsole Java Basics - Anfänger-Themen 4
Pentalon Eclipse JUNO keine Vorschläge von Methoden bzw. Interfaces der eigenen Klassen Java Basics - Anfänger-Themen 5
tuttle64 Keine Umlaute im Dos Fenster Java Basics - Anfänger-Themen 12
D Erstellte Jar datei zeigt keine Bilder an Java Basics - Anfänger-Themen 5
L Klassen Ich kann keine .jar Dateien mehr öffnen Java Basics - Anfänger-Themen 4
J Haben Chars wirklich keine KeyCodes? Java Basics - Anfänger-Themen 12
L Applet : keine Recht für Zugriff auf Clipboard (trotz Zertifikat) Java Basics - Anfänger-Themen 4
A contains bzw. indexOf liefert keine Treffer? Java Basics - Anfänger-Themen 3
M Java Webstart keine Zugriffe Java Basics - Anfänger-Themen 7
W Eclipse erstellt keine Klassen Java Basics - Anfänger-Themen 6
B Aus einem Eclipse Projekt eine .jar - keine Bilder drin Java Basics - Anfänger-Themen 7
K org.h2.jdbc.JdbcSQLException: Keine Daten verfügbar Java Basics - Anfänger-Themen 9
J Mehrere Zufallszahlen erzeugen, aber keine darf doppelt erzeugt werden - Wie? Java Basics - Anfänger-Themen 5
E String soll mit Großbuchstaben anfangen und keine Sonderzeichen enthalten Java Basics - Anfänger-Themen 4
P Zugriff auf Attribute einer Klasse, zu der keine Verbindung besteht Java Basics - Anfänger-Themen 11
J InputStreamReader + BufferedReader - keine Eingabemöglichkeit Java Basics - Anfänger-Themen 10
T JTable keine spaltenbeschriftung Java Basics - Anfänger-Themen 2
G Input/Output FilenameFilter aber bitte keine Unterordner Java Basics - Anfänger-Themen 5
M nach jar export keine db abfrage möglich Java Basics - Anfänger-Themen 2
G JDK installieren keine eclipse.exe gefunden Java Basics - Anfänger-Themen 16
S Erste Schritte Wo steht eigentlich das ein jar keine andere jars enthalten darf? Java Basics - Anfänger-Themen 19
O Erste Schritte Klassenname zurückgeben, keine instanz Java Basics - Anfänger-Themen 23
K keine Reaktion im TableModel nach ändern der liste? Java Basics - Anfänger-Themen 2
T keine buchstaben!nur zahlen eingabe möglich Java Basics - Anfänger-Themen 48
M keine geschwungenen Klammern Java Basics - Anfänger-Themen 9
E Input/Output Socket bekommt keine Verbindung bei funktionierendem Fremdziel Java Basics - Anfänger-Themen 2
V JavaApplet versendet keine mail Java Basics - Anfänger-Themen 8
B Interface Nach "package"-Nennung keine Toolbar-Icons mehr Java Basics - Anfänger-Themen 5
B Geerbte Instanz kann keine void Methode ausführen?! Java Basics - Anfänger-Themen 15
S Java Web Start lädt keine Bilder Java Basics - Anfänger-Themen 2
P Keine Rechenoperationen bei Doublewert? Java Basics - Anfänger-Themen 4
B Variablen keine Arrayübergabe für getter im Interface Java Basics - Anfänger-Themen 8
I Habe keine Idee was ich als Anfänger programmieren kann. Java Basics - Anfänger-Themen 4
R Kalender speichert keine Zeit Java Basics - Anfänger-Themen 2
A (Scheinbar) keine Schreibrechte in Linux Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben