2 StringVariablen aufeinander verweisen!

Status
Nicht offen für weitere Antworten.

Conn

Aktives Mitglied
Hallo,
brauch mal eure Hilfe. Möchte gerne zwei String Variablen aufeinander verweisen.

Code:
String s1 = new String();
String s2 = new String();
s2 = s1;
s1 = "Test";
System.out.println(s2);

Ich weiß so wie es jetzt geschrieben steht, kommt es zu keiner Anzeige, da s2 den Wert von s1 annimmt aber nicht auf diese verweist. Gibt es möglichkeiten, dass sich der elementare Datentyp String wie ein normales Objekt verhält?! Bin Anfänger, bitte seid gnädig, vielleicht war das ja auch ne dumme Frage.

Vielen Dank
C. :###
 
B

Bastone

Gast
Versuchs mal so:

Code:
String s1 = new String();
String s2 = new String();

s1 = "Test";
s2 = s1;

System.out.println(s2);
 

Leroy42

Top Contributor
Conn hat gesagt.:
Gibt es möglichkeiten, dass sich der elementare Datentyp String wie ein normales Objekt verhält?!

Er verhält sich exakt wie ein normales Objekt. Liegt vielleicht daran,
daran, daß String eben keine elementarer Datentyp ist sondern auch eine Klasse.

Durch
Code:
s2 = s1;
verweisen tatsächlich beide Variablen auf dasselbe Objekt. Änderungen in
s1 würden sich also automatisch auf s1 auswirken. Nun ist es jedoch so,
daß String immutable sind, also eben nicht geändert werden können.

Durch die folgende Anweisung
Code:
s1 = "Test";
läßt du s1 ja explizit auf ein anderen String verweisen; eben den String "Test"

davon bekommt s1 selbstverständlich nichts mit und zeigt nachwievor auf den
String ""
 
G

Guest

Gast
Ein String ist auch ein Objekt und kein primitiver Datentyp :p , aber anders als in C hast du in Java keine Zeiger. Was meiner Meinung nach gut ist!
Da man dadurch solche Sachen, wie du sie vorhast vermeiden kann. Es mag zwar durchaus sein, das solche Zuweisungen hilfreich sein könnten, aber es sollte immer auch anders gehen.

Falls du jedoch unbedingt solch eine Zuweisung machen willst, musst du dir ein Hilfkonstrukt bauen. In Java selber ist das nicht wirklich vorgesehen.
 
S

SlaterB

Gast
auch bei normalen Objeken würde das so wie du es aufbaust nicht funktionieren,

denn wenn du einer Variablen s1 etwas zuweist,
interessier das Tokyo nicht, den Rest der Welt nicht,
deine anderen Klassen nicht und
auch andere lokale Variablen in der Nähe nicht,

auf die Variable s2 hat das keine Auswirkung, s2 zeigt auf das, worauf es vorher auch schon zeigte, einen leeren String.

was anderes wäre es, wenn die beiden Variablen auf einen Container zeigen würden,
und du nur den Inhalt des Containers änderst:

sa1 = new String[1];
sa2 = sa1;
sa1[0] = "Huhu";
System.out.println(sa2[0]);

hier ist sa2[0] gleich sa1[0] denn beide zeigen ja immer noch auf das gleiche Objekt, das gleiche Array,
wenn sich der Inhalt des Array ändert merken das beide, denn beide sind ja nur eins ;)

andersrum, wenn nur wieder das Objekt selber änderst,
also
sa1 = new String[4000];

dann interessiert das sa2 wiederum nicht die Bohne,
sa2 zeigt immernoch auf sein 1er-Array mit 'Huhu' im ersten Feld


edit:
mit einem primitiven Datentyp wäre es auch nicht anders..
 
B

Bastone

Gast
Ich bin auch nur n Java noob, aber es ist doch so das es nur deswegen nicht funktioniert weil s1 noch keinen Wert beinhaltet und somit s2=s1 nichts ist. Drehe ich die Sache um funktionierts!?

Code:
String s1 = new String();
String s2 = new String();

s1 = "Test";
s2 = s1;

System.out.println(s2);
 

Leroy42

Top Contributor
Vergleich mal diesen Code
Code:
String s1 = new String();
String s2 = new String();

s1 = "Test";
s2 = s1;

System.out.println(s2);

mit dem, deinen ersten entsprechenden
Code:
String s1 = new String();
String s2 = new String();

s1 = "Test";
s2 = s1;
s1 = "KeinTest";

System.out.println(s2);
 

Conn

Aktives Mitglied
Code:
String s1 = new String();
String s2 = new String();

s1 = "Test";
s2 = s1;

System.out.println(s2);

Erst einmal vielen Dank für die schnellen Antworten. Das es so funktioniert hätte weiß ich. Ich wollte ja eben einen Verweis (o. Zeiger wie ich durch euch lernen konnte) haben, deshalb hatte ich dieses Beispiel so gewählt. Das Beispiel von SlaterB werde ich mal probieren. Nochmals vielen Dank. C. :toll:
 

Conn

Aktives Mitglied
Code:
public static void main(String[] args) {
    String[] s1 = new String[1];
    String[] s2 = new String[1];
    s2 = s1;
    s1[0] = "Test";
    System.out.println(s2[0]);
}

Ich hab das Beispiel von "SlaterB" getestet. Was soll ich sagen, funktioniert. Danke. C. :D
 
S

SlaterB

Gast
String[] s1 = new String[1];
String[] s2 = s1;
s1[0] = "Test";
System.out.println(s2[0]);

reicht schon, die andere Zeile bei dir hat keinen Effekt, außer den Speicher kurzzeitig zuzumüllen mit einem nichtbenutzten zweiten Array

insbesondere wird so deutlicher, dass wirklich nur ein Array benutzt wird, nicht zwei
 
Status
Nicht offen für weitere Antworten.

Oben