Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Wiki Markup
            Immutability helps to supporting security reasoning. It is safe to share immutable objects, without risk that the recipient can modify something that we are relying upon \[java:[Mettler 2010B|AA. Bibliography#Mettler 2010B]\].

Wiki Markup
Programmers could incorrectly expect that declaring a field or variable {{final}} makes the referenced object immutable. Declaring variables that have a primitive type to be {{final}} does prevent changes to their values after initialization (unless the unsupported {{sun.misc.Unsafe}} class is used). However, when the variable has a reference type, the presence of a {{final}} clause in the declaration only makes _the reference itself_ immutable. The {{final}} clause has no effect on the referenced object. Consequently, the fields of the referenced object can be mutable. For example, according to the _Java Language Specification_ \[java:[JLS 2005|AA. Bibliography#JLS 05]\], [§4.12.4|http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.12.4], "{{final}} Variables,"

...

Related Guidelines

MITRE CWE

CWE ID 607, "Public Static Final Field References Mutable Object"

...

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="a099dc471a4ba128-0e9e4cf5-4dcf438a-900d837b-15374324351987924a05c292"><ac:plain-text-body><![CDATA[

[java:[Bloch 2008

AA. Bibliography#Bloch 08]]

Item 13: Minimize the accessibility of classes and members

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="f9e4250eefcc4614-ca0916ce-47dc4788-9cc7b031-173bf10d35c1ff1b41ae666c"><ac:plain-text-body><![CDATA[

[java:[Core Java 2004

AA. Bibliography#Core Java 04]]

Chapter 6

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="ade8b1d6bda494a2-a6b28525-42384a9f-8e63b588-98c5328251b371f48a1f1809"><ac:plain-text-body><![CDATA[

[java:[JLS 2005

AA. Bibliography#JLS 05]]

[§4.12.4 "final Variables"

http://java.sun.com/docs/books /jls/third_edition/html/typesValues.html#4.12.4] ]]></ac:plain-text-body></ac:structured-macro>

 

§6.6 "Access Control"

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="ee90440afffed15f-f8348a9d-43df455c-9b6dbc56-d13a23ed4204a958d1344585"><ac:plain-text-body><![CDATA[

[java:[Mettler 2010B

AA. Bibliography#Mettler 2010B]]

 

]]></ac:plain-text-body></ac:structured-macro>

...