Question: I know that Strings are immutable.

Then, what is the difference between:

```
String name ="Name";
final String name ="Name";

```

Why do we use `final` in this context? Because String is already immutable there seems to be no need. Second related question, why are String's `immutable`?. Other Data Types like int, boolean are not. If String is immutable does that make it thread-safe? I read that **"if String been mutable, a request to load "java.io.Writer" could have been changed to load "mil.vogoon.DiskErasingWriter""** `means` ?

Answer: 
`final` means you cannot assign the variable a new value.

```
String name = "Name";
name = "MyName"; // legal

final String name = "Name";
name = "MyName"; // illegal, compiler error

```

Here is an article on why strings are immutable:

<http://javarevisited.blogspot.com/2010/10/why-string-is-immutable-in-java.html>
Its the difference between an object and its reference. A `final` variable can only be assigned a value once. This is true regardless of wether that variable refers to an immutable object or not.

Note that an 'immutable' object is itself typically (but not necessarily) composed of sets of `final` references.