immutable final?

Status
Nicht offen für weitere Antworten.

meez

Top Contributor
Werden eigentlich immutable Objekte (ausser String => Pool) intern wie final Objekt verwaltet...? ???:L
Ist das irgendwie bekannt :bahnhof:
 

meez

Top Contributor
Die Frage ist ein wenig falsch gesetellt...Ich meine nicht final wie final in Java (const), sondern werden sie irgendwie speziell im Speicher gehandhabt, da sie sich nicht mehr verändern soolten?
 

jpp

Mitglied
immutable werden Objekte genannt, die ihren Zustand niemals ändern. Die sind deshalb nützlich, weil man sie beliebig oft wiederverwenden kann, ohne Nebeneffekte durch parallele Änderungen befürchten zu müssen.
final werden Klassen markiert, von denen keine weiteren Klassen abgeleitet werden dürfen.
Die beiden Begriffe sind voneinander unabhängig, auch wenn Klassen von immutable Objekten häufig final deklariert werden.
 

jpp

Mitglied
Das es kein Sprachkonstrukt namens immutable gibt, kann die Java-Laufzeitumgebung immutable Objekte m.E. nicht anders behandeln als mutable Objekte. Wie soll sie denn den Unterschied erkennen?
 
S

stev.glasow

Gast
meez hat gesagt.:
Die Frage ist ein wenig falsch gesetellt...Ich meine nicht final wie final in Java (const), sondern werden sie irgendwie speziell im Speicher gehandhabt, da sie sich nicht mehr verändern soolten?
Achso, k.A. - würde mich aber auch mal interessieren.
 

meez

Top Contributor
jpp hat gesagt.:
immutable werden Objekte genannt, die ihren Zustand niemals ändern. Die sind deshalb nützlich, weil man sie beliebig oft wiederverwenden kann, ohne Nebeneffekte durch parallele Änderungen befürchten zu müssen.
final werden Klassen markiert, von denen keine weiteren Klassen abgeleitet werden dürfen.
Die beiden Begriffe sind voneinander unabhängig, auch wenn Klassen von immutable Objekten häufig final deklariert werden.

Vielen Dank aber das ist mir klar... :roll: :bae: ;)


Was ich mit meiner Frage meine, ist: Werden immutable Objekte von der VM anders gehandhabt wie normale Objekte, so wie sie auch final Objekte speziell verwaltet (darum kann mit final Performance rausgeholt werden) ...
 
S

stev.glasow

Gast
jpp hat gesagt.:
Das es kein Sprachkonstrukt namens immutable gibt, kann die Java-Laufzeitumgebung immutable Objekte m.E. nicht anders behandeln als mutable Objekte. Wie soll sie denn den Unterschied erkennen?
Stimmt, leuchtet ein.
 

meez

Top Contributor
Wieviele immutable Objekttypen gibt es überhaupt?
Wenn es mehr als String gibt, werden die wahrscheinlcih schon irgendwie gekennzeichnet sein ... Irgend ein "unzugängliches" Keyword so wie z.B. native...
 

jpp

Mitglied
meez hat gesagt.:
Wieviele immutable Objekttypen gibt es überhaupt?
Da fallen mir spontan java.lang.Integer usw. ein. Oder sämtliche Enums in Java 5.
meez hat gesagt.:
Wenn es mehr als String gibt, werden die wahrscheinlcih schon irgendwie gekennzeichnet sein ... Irgend ein "unzugängliches" Keyword so wie z.B. native...
Es gibt definitiv kein "unzugängliches Schlüsselwort".
 

kopfsalat

Bekanntes Mitglied
Passt vielleicht nicht ganz zur Frage, aber trotzdem:

Wenn ich mich recht entsinne, dann werden die final-Basistypen, wenn durch
Code:
final int a = 5;
deklariert, direkt zur Compilierzeit im ByteCode durch diesen Wert ersetzt. In jeder hierauf bezugnehmenden Klasse findet sich also nur die '5' selbst. Das ist eine Compileroptimierung.

Problem: Nachträgliches Ändern der Konstante. Dann muss man alle darauf bezugnehmenden Klassen ebenfalls neukompilieren, da sie noch den alten Wert enthalten.

Alternative:
Code:
public final static int a = new Integer(5).intValue();
Damit wird stets erst zur Ausführung der Wert 5 berechnet, und nachträgliches Ändern betrifft so alle Klassen.

Ob das nur für Klassenvariablen, oder auch Objektvariablen gilt, müsste man mal testen.
 

Illuvatar

Top Contributor
Und zwar ohne mysteriöses fünfzigstes Schlüsselwort ;)

Edit: War auf stev bezogen. Hat aber gedauert weil ich noch zählen musste ;)
 

meez

Top Contributor
Illuvatar hat gesagt.:
Und zwar ohne mysteriöses fünfzigstes Schlüsselwort ;)

Edit: War auf stev bezogen. Hat aber gedauert weil ich noch zählen musste ;)


Wär aber leichter gewesen, mit einem Schlüsselwort...
 
B

bygones

Gast
Immutable ist wie schon gesagt worden ein Konstrukt der Programmierer. Kein Element der VM ! daher gibt es kein final ähnliches Element um Java zu zeigen: "Ist ein immutable"....
 

Illuvatar

Top Contributor
Deswegen auch "Design Pattern" ;)

Edit: Wer will kann sich ja ne Immutable-Annotation schreiben (endlich mal ne sinnvolle Anwendung!), dann hat ers wenigstens in der API stehen.
So z.B.
Code:
@Documented
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.CLASS)
public @interface Immutable
{
}
 
R

Roar

Gast
meez hat gesagt.:
Nach Sourcecode nicht...:(
Und trotzdem muss die VM das irgendwie wissen...
warum?

edit: msit ich hab nru die erste seite gelesen :D

edit2: ich wieß nur dass die vm stringsentsrepchend handhabt (siehe strings vergleichen trhead in faq)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Immutable View auf StringBuffer? Allgemeine Java-Themen 13
J Klasse Immutable Allgemeine Java-Themen 14
Landei immutable Collections Allgemeine Java-Themen 27
J Immutable mit Interfaces möglich? Allgemeine Java-Themen 2
J immutable HashMaps und clone() Allgemeine Java-Themen 3
A Immutable Objects ? Allgemeine Java-Themen 8
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
G final "spammen" + bedeutung Allgemeine Java-Themen 14
J Final Method Allgemeine Java-Themen 9
I Java: public final Werte: Gute oder schlechte Praxis? Allgemeine Java-Themen 6
Neumi5694 Interpreter-Fehler final Eigenschaft während Laufzeit geändert Allgemeine Java-Themen 2
J private static final String variable Allgemeine Java-Themen 8
T Enumeration/Static Final/Bitfield Allgemeine Java-Themen 6
M final vor dem parameter eines Konstruktors Allgemeine Java-Themen 1
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
G Synchronization on non final field Allgemeine Java-Themen 10
Z Als Final deklarierte Klasse im Array sortieren Allgemeine Java-Themen 2
G Klasse als final -> Laufzeitverbesserung? Allgemeine Java-Themen 4
T Final Methode dennoch überschreiben! Allgemeine Java-Themen 10
W Innere Klasse und final Allgemeine Java-Themen 11
A Als FINAL deklarieren -> sinnvoll? Allgemeine Java-Themen 16
S 2 Fragen allgemeine fragen zu final und interface Allgemeine Java-Themen 13
S Reflections und final Allgemeine Java-Themen 19
O does not declare a static final serialVersionUID field of . Allgemeine Java-Themen 6
S Wave Soundausgabe Java 1.4.2 contra 1.5 Final Allgemeine Java-Themen 27
G final und Variablen Allgemeine Java-Themen 16
B Java 5.0 Final Allgemeine Java-Themen 3
M 1.5 final? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben