public class HelloWorld{
     public static void main(String []args){
         
        String s="java";
         s="world";
         
        System.out.println(s);
     }
}
Output:
world
public class HelloWorld{
     public static void main(String []args){
         
        String s="java";
         s="world";
         
        System.out.println(s);
     }
}
Output:
world
 
    
     
    
    You have two String objects in that code: "java" and "world". Each of them is immutable (unless you use reflection and rely on JDK internals). The s variable first points to the first one, then to the second one, but they're separate objects.
After this:
String s="java";
you have something like this in memory:
               +−−−−−−−−−−+
s:Ref3243−−−−−>| (string) |
               +−−−−−−−−−−+      +−−−−−−−−−+
               | value:   |−−−−−>| (array) |
               | ...      |      +−−−−−−−−−+
               +−−−−−−−−−−+      | 0: 'j'  |
                                 | 1: 'a'  |
                                 | 2: 'v'  |
                                 | 3: 'a'  |
                                 +−−−−−−−−−+
Then after
s="world";
you have:
               +−−−−−−−−−−+
               | (string) |
               +−−−−−−−−−−+      +−−−−−−−−−+
               | value:   |−−−−−>| (array) |
               | ...      |      +−−−−−−−−−+
               +−−−−−−−−−−+      | 0: 'j'  |
                                 | 1: 'a'  |
                                 | 2: 'v'  |
                                 | 3: 'a'  |
                                 +−−−−−−−−−+
               +−−−−−−−−−−+   
s:Ref6449−−−−−>| (string) |   
               +−−−−−−−−−−+      +−−−−−−−−−+
               | value:   |−−−−−>| (array) |
               | ...      |      +−−−−−−−−−+
               +−−−−−−−−−−+      | 0: 'w'  |
                                 | 1: 'o'  |
                                 | 2: 'r'  |
                                 | 3: 'l'  |
                                 | 4: 'd'  |
                                 +−−−−−−−−−+
So the println at the end shows the contents of the second string.
The value member shown above may or may not be called value in any given JDK implementation. It's a private data member.
