Search code examples
javastring-literals

how java handles string literals


in java, i have created 2 string literals having same value

String a = "Hello";
String b = "Hello";

now both of them should have same reference

System.out.println(a==n); // returns true

but when i do

b+=" World";
System.out.println(a==b); // returns false

Now i have 2 questions here
1. why a and b are not referencing to same object after 'b+=' operation? 2. how come i'm able to change string b without any error?(because i have read String class is immutable)


Solution

  • The reason you can change b is because you're technically making a new String object and assigning it to the existing reference.

    b += " World"
    

    is the same as

    b = b + " World";
    

    b is technically pointing to a new String object. So to start out, a and b are pointing to the same object, but when b is modified it is now a different object, so a will not equal "Hello World" and a==b will now be false.

    For examples of mutable String classes, try StringBuffer or StringBuilder. You can use their .append() method to add to the string, along with other methods to modify it.