String类型变量不可变
- string类型的变量不可变,下面的拼接是怎么回事呢?
// 拼接字符串
String str1 = "hello";
String str2 = "world";
String str3 = str1 + str2;
System.out.println(str3);
拼接都会新建
- 一个常量字符串
- 一个拼接之后的字符串
同为String类型,常量字符串和变量字符串的比较是有差别的
- 常量字符串,就是不通过外界方法,直接使用双引号生成的
- 同一个值的字符串在常量池中只会存储一份,机制类似于 Set集合
- 如此设计的目的是为了节约内存
构造器生成的字符串,同一个值也会存储多份
java为何及设计两种存储方式
- 常量不变,一份即可
- 变量常变,多份分开存储
java编译优化存储string
字符串的比较原理在于 判断 两个变量存储的是常量还是变量