ich habe eine kurze Verständnisfrage. Wäre super, wenn mir jemand weiterhelfen könnte. Also liegt eine identische Referenz im folgenden (vereinfachten) Beispiel vor?
objekt1=Class;
objekt2=Class;
objekt1= new Class(1,2,3);
objekt2=new Class(2,2,2);
eigenlich müssten die Variablen objekt1 und objekt2 doch die gleiche Referenz aufweisen, oder? Beide referenzieren ja ein Objekt der gleichen Klasse, wenn auch mit unterschiedlichen Werten.
Keine Ahnung was du meinst. "Gleich" (im Sinne von ==) sind alle Referenzen, die auf dasselbe Objekt (also dieselbe Stelle im Speicher) zeigen. Es spielt keine Rolle, ob zwei Objekte "innerlich völlig gleich" sind, sind sie mit zwei unterschiedlichen new-Aufrufen erstellt worden, sind die Referenzen nicht gleich (wieder im Sinne von ==).
Die Klasse ist das Rezept, nach dem du Objekte "kochst". Natürlich kannst du nach einem Rezept auch mehrmals kochen. Dann ist aber trotzdem jedes Mahl (Objekt) (im einfachsten Fall) unabhängig von anderen Mählern.
Keine Ahnung was du meinst. "Gleich" (im Sinne von ==) sind alle Referenzen, die auf dasselbe Objekt (also dieselbe Stelle im Speicher) zeigen. Es spielt keine Rolle, ob zwei Objekte "innerlich völlig gleich" sind, sind sie mit zwei unterschiedlichen new-Aufrufen erstellt worden, sind die Referenzen nicht gleich (wieder im Sinne von ==).
also ich meinte wirklich nicht, dass sie inhaltlich gleich sein sollten sondern nur die referenz sollte gleich sind. scheint ja bei meinem beispiel nicht zu sein, da zwei unterschiedliche new aufurfe verwendet wurden. könntet ihr mir vielleicht ein einfaches beispiel aufschreiben, was das konzept der gleichen referenz verdeutlicht?
Dein Beispiel ist nicht "vereinfacht", sondern unverständlich.
Java:
Object obj1 =newObject();Object obj2 =newObject();System.out.println("obj1 == obj2 --> "+(obj1 == obj2));//false
obj2 = ob1;//jetzt zeigen beide auf dasselbe Objekt im Speicher, nämlich das zuerst erzeugte System.out.println("obj1 == obj2 --> "+(obj1 == obj2));//true
obj1 =newObject();//obj2 zeigt aber trotzdem immer noch auf das vorherige ObjektSystem.out.println("obj1 == obj2 --> "+(obj1 == obj2));//false
also ich meinte wirklich nicht, dass sie inhaltlich gleich sein sollten sondern nur die referenz sollte gleich sind. scheint ja bei meinem beispiel nicht zu sein, da zwei unterschiedliche new aufurfe verwendet wurden. könntet ihr mir vielleicht ein einfaches beispiel aufschreiben, was das konzept der gleichen referenz verdeutlicht?
erstellt wird ein object der Klasse Cass mit den Parametern 1,2,3 und eine referenz mit namen object1 drauf gelegt. in zeile 2 wird ein neues object der Klasse Class(mit gleichen parametern) erstellt und eine referenz mit namen object2 drauf gelegt.
->die referenzen darauf zeigen auf verschiedene Objecte und sind daher >>>nicht<<< 'gleich'!
bei
Java:
objekt1=newClass(1,2,3);
objekt2= object1;
wird ein object erstellt und eine referenz mit namen object1 drauf gelegt. in zeile 2 wird referenz1 und referenz2 gleichgestetzt. es zeigen beide referenzen auf das gleiche object, und sind daher 'gleich'.
liess dir das mal mehrfach durch und liss noch n wenig zu Objecten und Referenzen.
mit 'new' wird >>>immer<<< ein neues object angelegt. (hat nix mit klassen zu tun)
->wenn die eigenschaften nicht gleich sind ist es mit sicherheit ein anderes Object(referenzen auch ungleich)
->fals die eigenschaften gleich sind muss es sich nicht um referenzen auf das selbe object handeln
bsp:
Mensch johan = new Mensch(1,2,3);
Mensch johanna = new Mensch(1,2,3);
johan gibt den löffel ab johanna lebt weiter.(johan und johanna sind namen-referenzen auf verschiedene menschen)
Mensch johan = new Mensch(1,2,3);
johan beschliesst weiblich zu werden...
Mensch johanna = johan; (johan und johanna zeigen auf das selbe Menschenobject)
fals johanna nun das zeitliche segnet gibts johan auch nicht mehr.