字符串的内容不可更改:

  1. 每一个字符串都是固定的值 无法在原字符串上直接修改<br /> 每次修改字符串的值都是重新开辟空间<br /> 并更改地址<br /> ![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1653374209413-17f6c304-a035-4060-9352-caa6377f2098.png#clientId=u9ab20755-3b33-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=388&id=u38b9c255&margin=%5Bobject%20Object%5D&name=image.png&originHeight=485&originWidth=746&originalType=binary&ratio=1&rotation=0&showTitle=false&size=39641&status=done&style=none&taskId=u2ac21fb5-f8f5-497c-9685-8cbb8b6f312&title=&width=596.8)<br />例如:<br />`String str="哈哈";`<br />` str+="ab";`<br />`System.out.println(str); //结果输出:哈哈ab`<br />"哈哈"占用一个堆内存 "ab"占用一个堆内存 最终结果str又占用一个<br />所以这样会产生大量垃圾对象<br /> 字符串不可变特性 每次更改字符串 都会重新开辟空间<br /> 所以不推荐使用字符串进行大批量的拼接操作<br /> 这样会产生大量垃圾对象

推荐使用StringBuffer和StringBuilder(后面讲)

字符串的匿名对象:

System.out.println(“HelloJava”);
每一个字符串都是String类的匿名对象

        String str="qq";  每一个字符串都相当于开辟堆内存空间