学习java时,发现 String变量 与其他引用类型的变量有点不太一样,
String a = "aaa"; String b="aaa"; 经过测速发现a==b 为true 这说明a b指向同一个字符串对像 ,
String a ="aaa"; String b = new String("aaa"); a==b 为false ,说明a ,b 指向不同字符串对象,
为什么会这样了 ?
经过查找资料发现 java虚拟机内存中存在一个字符串缓冲区 当把一串字符串赋值给一个字符串变量时,
若字符串存在缓冲区,则将缓冲区字符串的引用赋值给字符串变量,否则就分配新的内存地址存放字符串,并将引用赋值给字符串变量。
若使用new String创建字符串对象,会直接从java堆内存中分配空间存储字符串,并将引用赋值给字符串变量。
字符串对象是不可变的对象,当字符串发生变化时会创建新的字符串对象
当字符串变量改变时,会重新分配内存存放字符串,即字符串变量重新指向新的字符串
覆盖+ 运算符
"aaa"+"bbb";
使用+运算符连接字符串时,等同于String类的append()方法, 新建了一个字符串对象包含了“aaabbb”
当字符串经常改变时,应当使用StringBuffer类 的append方法来增加字符串