Also, um Ihre Fragen zu beantworten, müssen Sie zuerst wissen, wie Java Variablen übergibt.
eine Variable einen Wert hat:
int i = 1234;
Person p = new Person("Peter");
Nun wird die Variable i enthält genau 1234, während die Variable p die Speicher Adresse der Person erstellt enthält.
Also ich enthält 1234 und p enthält die Adresse (sagen wir a4dfi3).
anyMethodYouLike(p);
System.out.println(p.getName());
public void anyMethodYouLike(Person somePerson) {
somePerson.rename("Homer");
}
also geben wir in diesem Beispiel die Methode anyMethodYouLike die Variable p ... warten! Wir geben der Methode den Wert der Variablen (a4dfi3). Die Methode ruft dann das Umbenennen für diese Variable auf (die immer noch die gleiche Adresse wie p hat, daher ändert sie dieselbe Person, auf die p zeigt). So wird nach der Methode der Name der Person, auf die p zeigt, gedruckt, was zu "Homer" führt.
someOtherMethod(p);
System.out.println(p.getName());
public void someOtherMethod(Person somePerson) {
somePerson = new Person("Walter");
}
In diesem Beispiel geben wir immer noch die Adresse unserer Person namens "Peter" an die Methode. Aber dieses Mal erstellt die Methode eine neue Person in somePerson (also überschreiben Sie die Adresse in etwasPerson zu .. sagen wir 13n37s. ABER!Die Person bei a4dfi3 wurde nicht geändert! Der Druckaufruf gibt immer noch "Peter" und nicht "Walter" aus. Jetzt
, mal sehen, wie dieses Verhalten mit Primitiven:
someMethod(i);
System.out.println(i);
public void someMethod(int someInt) {
someInt++;
}
So wird der Wert von i (1234) wird an someInteger weitergegeben. Dann wird someInteger auf 1235 erhöht. Aber ich bin immer noch 1234.
Dies ist der große Unterschied zwischen Objekten und Primitiven in Java.
Nun zu Ihren Fragen: 1. Wie Sie hier lesen können, übergibt Java immer die Referenzadresse des Objekts. 2. Wenn Sie nicht möchten, dass sich jemand mit den Werten Ihrer Objekte anlegt, müssen Sie zuerst ein neues Objekt mit diesen Informationen erstellen (zB mit Cloneable und clone()), aber es ist ein Chaos, weil Sie es machen müssen sicher, dass alles in Ihrem Objekt, das nicht primitiv ist, neu erstellt wird, was einfach schrecklich ist, wenn Sie riesige Baumstrukturen von Objekten haben.
Ich hoffe ich konnte helfen, Ferdi265
... oder das Objekt ist so konzipiert, dass es unveränderlich ist. –
@Michael Borgwardt: großer Punkt. Ich denke, das Hinzufügen der Antwort wird die Person verwirren, die die Frage stellt ... –
ist ein Array, das als Referenz übergeben wird? Soweit ich weiß, ist es ein primitiver Typ, aber es ist veränderlich. – bigblind