String是不可变对象
java.lang.String使用了final修饰,不能被继承;
字符串底层封装了字符数组及针对字符数组的操作算法;
字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值;
Java字符串在内存中是采用Unicode的编码方式,任何一个字符是对应两个字节的编码;
String常量池
Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串;
对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象;
public class StringDemo02 {
public static void main(String[] args) {
String s0 = "ABCD";
String s1 = "AB";
String s2 = "CD";
String s3 = s1 + s2;// 底层会 new String("ABCD");
String s4 = "AB" + "CD";// 直接从池中取
/*
*当给一个String类型的变量赋值时, 这个值就是一个String类型的字面量值.
*先从常量池中查找这个对象,有则直接取,没有则在池中放一份.
*/
System.out.println(s0 == s3);// false
System.out.println(s4 == s0);// true
}
}