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)
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.