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.

其他提示

  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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top