企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 1. 不可变性 1. 变量a存储的是字符串的引用 2. 不可变指的**是堆中的字符串数据不可改变** 3. 对于变量a,可以随意赋值,但是原来的字符串不变;这样其他引用这个字符串的地方,不会受到影响,线程也会安全 ~~~ public class test { public static void main(String[] args) { String a = "hello a"; String b = a; a = "go go"; System.out.println("a=" + a + "\nb=" + b); } } ~~~ 输出 ``` a=go go b=hello a ``` ![](https://img.kancloud.cn/de/d1/ded1a39ffefec52d9d208c6aff9bfaea_1156x628.png) ## 2. 创建字符串 **1. 字面量** ~~~ String a = "hello a"; ~~~ **2. new** ~~~ String c = new String("hhe"); ~~~ **3. 两种方式的区别** Java 的字符串池属于 JVM 专门给指定的特殊内存区域,用来存储字符串字面量 > 1. 字面量的方式,首先会在常量池中找该字符串,存在直接返回引用,否则创建一个对象,并放在常量池,便于重用 > 2. ~~~ public class test { public static void main(String[] args) { String a = "hello a"; String b = a; a = "go go"; b.toUpperCase(); //只会返回新字符串地址,并没影响b的引用值和字符串原来的值 System.out.println("a=" + a + "\nb=" + b); } } ~~~ ``` a=go go b=hello a ```