In addition to what John Skeet said, the value cannot be changed, but the contents can be changed.
final Integer one = new Integer(1); ... one = new Integer(2);
Also keep in mind that the final and static finals do not match. final is within the instance instance, while the static ending is the same for all instances of the class (in other languages this can be called a constant).
Personally, I believe that the advantage of the final, even when not absolutely necessary in order to make your software work, is in semantic meaning. It offers you the opportunity to tell the compiler and the next person working on this code that this variable is not intended to be modified, and that attempting to change it may lead to an error.
extraneon
source share