Here are a set of diagrams to explain Java String’s immutability.
1. Declare a string
String s="abcd";
2. Assign a string variable to another string variable
String s2=s;
3. Concat string
s=s.concat("ef");
Summary
Once a string is created in memory(heap), it can not be changed. We should note that all methods of String do not change the string itself, but rather return a new String.
If we need a string that can be modified, we will need StringBuffer or StringBuilder. Otherwise, there would be a lot of time wasted for Garbage Collection, since each time a new String is created. Here is an example of StringBuilder usage.