Question

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)

Was it helpful?

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.

OTHER TIPS

  1. When you do b+=" World" you are creating a new string instance, of course this does not point to the same old string anymore.

  2. You are not changing the old string, instead you are creating a new string and assigning it to the variable b. Use the final modifier if you want to always refer to the same object with that variable.

  1. a and b are pointing to a String object. Modifying b, means you are now pointing to a new object.

  2. Because Strings are immutable, when you "modify" a string, a new object is created. That's why the second is no longer the same.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top