Does it make sense to define a final String in Java?

JavaStringFinal

Java Problem Overview


> Possible Duplicate:
> String and Final

From http://docs.oracle.com/javase/6/docs/api/java/lang/String.html I can read that:

Strings are constant; their values cannot be changed after they are created. 

Does this mean that a final String does not really make sense in Java, in the sense that the final attribute is somehow redundant?

Java Solutions


Solution 1 - Java

The String object is immutable but what it is is actually a reference to a String object which could be changed.

For example:

String someString = "Lala";

You can reassign the value held by this variable (to make it reference a different string):

someString = "asdf";

However, with this:

final String someString = "Lala";

Then the above reassignment would not be possible and would result in a compile-time error.

Solution 2 - Java

final refers to the variable, not the object, so yes, it make sense.

e.g.

final String s = "s";
s = "a"; // illegal

Solution 3 - Java

It makes sense. The final keyword prevents future assignments to the variable. The following would be an error in java:

final String x = "foo";
x = "bar" // error on this assignment

Solution 4 - Java

References are final, Objects are not. You can define a mutable object as final and change state of it. What final ensures is that the reference you are using cannot ever point to another object again.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCampaView Question on Stackoverflow
Solution 1 - JavaMike KwanView Answer on Stackoverflow
Solution 2 - JavaMByDView Answer on Stackoverflow
Solution 3 - JavaColin DView Answer on Stackoverflow
Solution 4 - JavaKalpak GadreView Answer on Stackoverflow