Was bedeutet es, Interna mit einem unveränderlichen Objekt in Java zu teilen?

8

Ich habe Effektives Java gelesen und bin auf die Aussage gestoßen, dass Sie nicht nur unveränderliche Objekte teilen können, sondern auch ihre Interna teilen können. Aber ich kämpfe um herauszufinden, was das wirklich bedeutet, und ein Beispiel würde sicherlich helfen, da in dem Buch kein Beispiel gegeben ist. Ich weiß bereits, dass unveränderliche Objekte nicht geändert werden können, z. B. String .

    
blackpanther 27.06.2013, 07:22
quelle

4 Antworten

9

Lesen Sie Buch weiter:

  

Die BigInteger -Klasse verwendet intern eine Vorzeichen-Magnituden-Darstellung. Das Vorzeichen wird durch int dargestellt und die Größe wird durch ein int -Array dargestellt. Die negate -Methode erzeugt eine neue BigInteger gleicher Größe und entgegengesetzten Vorzeichens. Das Array muss nicht kopiert werden. Das neu erstellte BigInteger zeigt auf dasselbe interne Array wie das Original.

    
NINCOMPOOP 27.06.2013, 07:29
quelle
6

Zum Beispiel, wenn Sie eine Klasse haben

%Vor%

Dann sind a und b die "Interna" dieser Klasse. Da dies eine Instanz von BigDecimal ist, sind sie unveränderlich. Wenn Sie eine Operation wie setBToZero() implementieren, können Sie einfach Ihre Instanz von a wiederverwenden und müssen keine neue erstellen. Zum Beispiel

%Vor%

Sie teilen Ihr internes a und da es unveränderlich ist, müssen Sie sich keine Gedanken über Änderungen Ihres gemeinsamen Status machen. Dies ist besonders nützlich, wenn es sich um große Objekte handelt. Wenn Sie Schnittstellen verwenden, können Sie einige Operationen nur mithilfe von Proxyobjekten implementieren.

    
gregor 27.06.2013 07:34
quelle
0

Ich denke, was sie wirklich sagen ist, dass normalerweise mit veränderbaren Objekten auf Felder mit Getter- und Setter-Methoden zugegriffen wird und diese modifiziert werden und diese in einer Multithread-Umgebung synchron sind. Mit unveränderlichen Objekten, da diese Felder garantiert immer die gleichen sind, sind Sie vollkommen sicher, indem Sie sie public machen und sie "freilegen" und "teilen". Was gut ist - der Zugriff auf ein öffentliches Feld kann klarer und effizienter sein als das Aufrufen einer Methode.

    
selig 27.06.2013 07:30
quelle
0

Ein Beispiel für das Teilen von Interna unveränderbarer Objekte. Daten sind unveränderlich, sie teilen ihr Byte-Array mit anderen unveränderlichen Dateninstanzen.

%Vor%     
Grzegorz Żur 27.06.2013 07:35
quelle

Tags und Links