Der folgende Code für Integer
verwendet das Objekt interning:
Aus der API-Dokumentation geht nicht eindeutig hervor, ob dieser Code für Boolean
Offensichtlich kann es. Aber muss es?
AKTUALISIEREN
Ich stimme zu, dass der Quellcode erklären kann, was tatsächlich passiert (Übrigens, danke für die Antworten). Um die Frage weniger trivial zu machen, gibt es einen Teil der Java-API-Spezifikation oder JSL, der was MUSS passiert?
Es war natürlich, die Frage so gegen den Code zu stellen:
%Vor% Das Ergebnis hängt davon ab, ob "Object Interning" garantiert ist oder nicht. Es ist besser, diesen Code vollständig zu vermeiden und true
anstelle von Boolean.TRUE
zu verwenden (anstatt Details in irgendwelchen Spezifikationen oder Quellen nachzuschlagen), aber es ist ein berechtigter Grund, die Frage zu stellen.
HINWEIS: In der Tat habe ich keine Garantien für das Objekt-Interning für Integer
in den googled-Spezifikationen gesehen. Es kann also nur ein Implementierungsdetail sein, auf das sich niemand verlassen sollte.
Die JLS garantiert, dass:
%Vor%verwendet Interning (mindestens zwischen -128 und 127 für Integer und für True und False für Booleans).
Die relevanten Javadocs garantieren auch, dass:
%Vor%gibt internierte Objekte zurück.
Allerdings gibt es keine expliziten Garantien für valueOf(String)
: Obwohl dies in der spezifischen Implementierung der Fall ist, die Sie verwenden, ist dies bei einer anderen JVM oder in zukünftigen Versionen möglicherweise nicht der Fall. In der Tat wäre eine Implementierung, die return new Boolean(Boolean.parseBoolean(input))
gültig wäre.
Basiert auf dem Quellcode , wird der Boolesche Wert wie folgt analysiert:
%Vor% Dabei sind TRUE
und FALSE
statische (unveränderliche) Objekte. Also ja, geparste Booleans sind interniert.
Allerdings stimme ich @ JBNizets Kommentar zu, dass man sollte Code-Verträge nicht aus dem Quellcode ableiten: Solange ein Feature nicht dokumentiert ist, können die Entwickler von Java ihre Meinung ändern. Verwenden Sie besser Boolean.equals
, um zu prüfen, ob zwei Objekte gleichwertig sind.