warum werden nicht die neuen Point Daten der Zeile 25 beim ausprinten Zeile 28 übernommen ?

latrellvie

Mitglied
Hallo bei diesen Programm wird pt1 und ptAlias mit (10,10) definiert und ausgegeben(Zeile 22 und 23)
dann ändere ich ptAlias bei Zeile 25 und neue Daten werden nicht ausgepríntet(Zeile 28). Was stimmt da nicht ? Großes Danke im Vorhinein !!!!!!!!!!!!!!!!!!!!!!!!!!!!!



Java:
import java.awt.* ;

class ZHU_Kap28_Auf2
{
	public static void main (String[]args)
	{
		Point pt1 = new Point (10,10);
		Point pt2 = new Point (30,30);
		Point ptAlias = (pt1);
		int flaeche,laenge,breite;
		int x1=10,y1 =10,x2=30,y2=30;
		String strpt1= pt1.toString(), strptAlias= ptAlias.toString();
	
		
		
		
		if ( pt1 == ptAlias)
			System.out.println(" pt1 und ptAlias verweisen auf dasselbe Objekt");
		else
			System.out.println(" pt1 und ptAlias verweisen nicht auf dasselbe Objekt");
			
		System.out.println("Point pt1 vorher :" + strpt1+"\n"+
		"Point ptAlias vorher :" + strptAlias );
		
		ptAlias = new Point(10*2,10*2);
		
		System.out.println("Point pt1 nacher :" + strpt1+"\n"+
		"Point ptAlias nacher :" + strptAlias );
		
	}
}
 
Weil du
Code:
strpt1
und
Code:
strptAlias
ausgibst und die werden in deinem Code nicht geändert.
 
Warum sollten sie das? Strings sind unveränderlich. Du fragst zum Zeitpunkt x (Zeile 12) nach einer Stringrepräsentation von ptalias, die wird dann in der Referenz strptAlias gespeichert solange bis du dieser Referenz einen neuen Wert zuweisen würdes, was du nicht tust, deshalb ist zum Zeitpunkt y (Zeile 28) auch immernoch das selbe in dieser Variablen gespeichert.
 
du teilst
Code:
strptAlias
keinen neuen Wert zu, warum sollte sich da was verändern?

Java:
if ( pt1 == ptAlias)
Objekte vergleicht man übrigens mit
Code:
equals
z.B.
Code:
obj1.equals(obj2)
und nicht mit
Code:
==
 
Zuletzt bearbeitet:
Java:
if ( pt1 == ptAlias)
Objekte vergleicht man übrigens mit
Code:
equals
z.B.
Code:
obj1.equals(obj2)
und nicht mit
Code:
==

Hmm.. ich weiß da etwas anderes. Ich beschäftige mich auch gerade mit dem Thema und habe Folgendes gelernt:
Mit == kann man überprüfen, ob zwei Referenzen auf das selbe Objekt verweisen.
Beispiel
Code:
Point pt1= new Point(30,15);
Point pt2 = pt1;

Mit equals vergleicht man nur den Inhalt von Objekten.
Code:
Point pt3 = new Point(22,98);
Point pt4 = new Point(22,98);
Da zeigen die Referenzen nicht auf das selbe Objekt, aber besitzen den selben Zustand.
 
Zuletzt bearbeitet:
Zuerst mal Danke für die Antworten, jede vertieft mein Wissen weiter !
NUN ... :=) ... Ich weiß ich habe in Zeile 25 nur ptAlias geändert aber da strptAlias als Referenz zu ptAlias gilt [Zeile 12 als strptAlias= ptAlias.toString();] gehe ich davon aus, dass das Programm in Zeile 28 auf strptAlias trifft dann die Definition davon nachschaut [ strptAlias= ptAlias.toString(); in Zeile 12] und daher den neuen Wert ausgiebt . Stimmt aber anscheinend nicht.
 
Es gibt beim Programmieren sowas wie "Definitionen" nicht direkt, sondern das = steht für eine Zuweisung. Es wird der Variablen nur der Zustand des Point-Objekts zum Zeitpunkt des Methodenaufrufs zugewiesen.
 
Nein, strptAlias ist die Referenz auf einen String, den du in Zeile 12 quasi erstellst. Du kannst aber übrigens einfach schreiben
Code:
System.out.println(ptAlias);
da hierbei immer die
Code:
toString()
Methode des Objekts aufgerufen wird.
 
Code:
aber da  strptAlias als Referenz zu ptAlias gilt [Zeile 12 als strptAlias= ptAlias.toString();]
Das ist keine Referenz!, sonderne eine Zuweisung eines Strings. Der String wird physikalisch im Speicher angelegt.


Code:
gehe ich davon aus, dass das Programm in Zeile 28 auf strptAlias trifft dann die Definition davon nachschaut
Das ist keine Definition, sondern eine Anweisung.

Die Denkweise ist nicht ganz unlogisch, weil ja bei Funktionen und KlassenMethoden genau sowas passiert.
Aber allein die Schreibweise "strptAlias=" zweigt klar, dass es eine Anweisung ist. (und kein "return ...")
 

Zurück
Oben