字符串是常量;它们的值在创建之后不能更改。 String 对象是不可变的,所以可以共享
String str1 = "abc"+"bcd";
是由于编译器做了优化,编译器会先把字符串拼接,再在常量池中查找这个字符串是否存在,如果存在,则让变量直接引用该字符串。所以str1和str2引用也是相同的。
System.out.println(str1 == str2);//true
String str5 = str3+str4;
str3和str4是两个变量,编译器认为是两个变量相加,不会做优化. str5 的对象不是显式赋值,编译器会在堆中重新分配一个区域来存储它的对象数据。所以str1和str5的引用是不一样的。
System.out.println(str1 == str5);//false
|