字符串对象是不可变的。
String str = "ObjectOne"+"ObjectTwo";
is same as
String str = "ObjectOneObjectTwo";
不可变是指存储在 String 对象中的值不能更改。然后我们想到的下一个问题是“如果 String 是不可变的,那么我如何能够随时更改对象的内容?” . 好吧,准确地说,反映您所做更改的不是同一个 String 对象。在内部创建了一个新的 String 对象来进行更改。
所以假设你声明了一个 String 对象:
String myString = "Hello";
接下来,您要将“Guest”附加到同一字符串。你做什么工作?
myString = myString + " Guest";
当您打印 myString 的内容时,输出将是“Hello Guest”。尽管我们使用了相同的对象(myString),但在内部过程中创建了一个新对象。所以 mystring 将引用“Hello Guest”。对 hello 的引用丢失了。
String s1 = "hello"; //case 1
String s2 = "hello"; //case 2
在情况 1 中,文字 s1 是新创建的并保存在池中。但是在情况 2 中,文字 s2 引用 s1,它不会创建新的。
if(s1 == s2) System.out.println("equal"); //打印相等
String s= "abc"; //initaly s refers to abc
String s2 =s; //s2 also refers to abc
s=s.concat("def"); // s refers to abcdef. s no longer refers to abc.