String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作。
String类被final关键字修饰,意味着String类不能被继承
String类底层的char数组被final修饰所以不可变
“+”连接符(字符串连接符)以及对象转换为字符串提供了特殊的支持
使用“+”连接符时,JVM会隐式创建StringBuilder对象,这种方式在大部分情况下并不会造成效率的损失,不过在进行大量循环拼接字符串时则需要注意。
与此之外还有一种特殊情况,也就是当"+"两端均为编译期确定的字符串常量时,编译器会进行相应的优化,直接将两个字符串常量拼接好,例System.out.println(“Hello” + “World”);
“+”连接符对于直接相加的字符串常量效率很高,因为在编译期间便确定了它的值
1)String是不可变字符序列,StringBuilder和StringBuffer是可变字符序列。
2)执行速度StringBuilder > StringBuffer > String。
3)StringBuilder是非线程安全的,StringBuffer是线程安全的。
String对象的intern方法会得到字符串对象在常量池中对应的引用,如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用
直接使用双引号声明出来的String对象会直接存储在常量池中;
String s1 = "AB";
String s2 = new String("AB");
String s3 = "A";
String s4 = "B";
String s5 = "A" + "B";
String s6 = s3 + s4;
System.out.println(s1 == s2);
System.out.println(s1 == s5);
System.out.println(s1 == s6);
System.out.println(s1 == s6.intern());
System.out.println(s2 == s2.intern());
```![在这里插入图片描述](https://img-blog.csdnimg.cn/f4330b41fd1b42a4a0d3fe6b3c96736e.png)