The String class being final is different then the fact that strings are immutable. Being final means that the String class cannot be subclassed. And the fact the strings are immutable means that once a String has been created it can't be changed. You can only what the reference points to. so
Right. I was trying to speak to the earlier point of subclassing. Since I don't think the question has been answered yet... One reason for making string immutable: Suppose a string is passed to an object which needs to save the the information in that string for future use. If the string were not immutable, it would need to make a copy of the information in string, at extra cost in memory and time, or save a reference to the string and run the risk that somebody else will change the value of the string in the future, which is generally unacceptable. Thus we need an immutable String class.