java学习--String字符串 String 的核心本质不可变性在 Java 中String是一个引用数据类型位于java.lang.String它最核心的特性就是不可变immutable。什么是不可变一旦一个 String 对象被创建出来它内部包含的字符序列就永远无法被改变。任何看似“修改”字符串的操作比如拼接、替换、截取实际上都不会改动原对象而是生成了一个全新的String 对象。底层是如何实现的String 类被final修饰意味着它不能被继承。其底层维护了一个被private final修饰的字节数组在较新的 JDK 版本中是byte[] value早期版本是char[]。因为数组是私有的且被 final 锁定外部无法直接修改里面的内容从而保证了不可变性。为什么要设计成不可变线程安全不可变的对象在多线程环境下天然安全不会出现数据错乱。支持常量池缓存只有不可变的对象才能被安全地共享和复用。安全性与哈希值固定String 经常作为 HashMap 的键Key或用于数据库连接等敏感场景不可变性保证了它的哈希值不会被改变也不会被恶意篡改。2. 两种创建方式与字符串常量池Java 为了优化性能专门开辟了一块内存区域叫字符串常量池String Pool。不同的创建方式决定了对象在内存中的存放位置4。字面量赋值推荐方式JVM 会先去字符串常量池中查找是否已经存在hello。如果存在直接把引用地址给s1和s2如果不存在则在池中创建一个。因此s1 s2的结果为true因为它们指向的是同一个对象2。这种方式能最大程度地复用对象节省内存。代码String s1 hello; String s2 hello;new 关键字创建使用new时JVM 会强制在堆内存中开辟一块新空间来存放这个 String 对象。即使常量池中已经有了hello它也会在堆里再复制一份。因此s1 s3的结果为false。代码String s3 new String(hello);