how java handles string literals [duplicate]

风格不统一 提交于 2019-12-23 01:47:28

问题


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)


回答1:


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.




回答2:


  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.




回答3:


  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.



来源:https://stackoverflow.com/questions/18084776/how-java-handles-string-literals

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!