Der folgende Code für Integer
verwendet Objekt Internierung:Ist der Boolean in Java interniert?
Es ist nicht klar von API-Dokumentation, ob dieser Code für Boolean
verwendet auch internierten Objekt:
Boolean.valueOf("true")
Offensichtlich es kann. Aber muss es?
UPDATE
Ich bin damit einverstanden, dass Quellcode erklären kann, was tatsächlich geschieht (BTW, danke für die Antworten). Um die Frage weniger trivial zu machen, gibt es einen Teil der Java-API-Spezifikation oder JSL, der sagt, was MUSS passieren?
Es war natürlich die Frage gegen den Code wie folgt zu stellen:
String str = "true";
if (Boolean.valueOf(str) == Boolean.TRUE) { ... }
Das Ergebnis hängt davon ab, ob „Objekt Internierung“ gewährleistet ist oder nicht. Es ist besser, diesen Code ganz zu vermeiden und true
anstelle von Boolean.TRUE
zu verwenden (anstatt Details in irgendwelchen specs oder Quellen nachzuschlagen), aber es ist ein gültiger Grund, die Frage zu stellen.
HINWEIS: In der Tat habe ich keine Garantien für Objekt Internierung für Integer
in jeder googled Spezifikationen gesehen. Es kann also nur ein Implementierungsdetail sein, auf das sich niemand verlassen sollte.
Sie können selbst überprüfen, indem Sie den Quellcode –
überprüfen Sie können auch überprüfen, indem Sie zweimal aufrufen und überprüfen, ob Sie die gleiche boolesche Instanz zweimal oder nicht erhalten. Warum kümmert es dich überhaupt? Dies sollte nichts an Ihrem Code ändern. –
@a_horse_with_no_name, ** ist Objekt interning außerhalb der Spezifikation? ** Source-weise ich denke, es gibt das Objekt 'Boolean.TRUE' (oder' Boolean.FALSE' für '" false "'). Bei einem so kleinen Wert (nur 2) reichen diese Konstanten aus, um den Pool zu modellieren. Aber ist es durch die Spezifikation diktiert? – uvsmtid