1. String 对象的 intern 方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与String 对象的 equals 结果是 true ),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用;
2. 字符串的 操作其本质是创建了 StringBuilder 对象进行 append 操作,然后将拼接后的 StringBuilder 对象用 toString 方法处理成 String 对象,这一点可以用 javap c StringEqualTest.class 命令获得 class 文件对应的 JVM 字节码指令就可以看出来。

java平台提供了两种类型的字符串String 和 StringBuffer/StringBuilder ,它们都可以储存和操作字符串区别
如下。
1)String 是只读字符串,也就 意味着 String 引用的字符串内容是不能被改变的。 初学者可能会有这样的误解:

String str = abc
str = bcd

如上,字符串str明明是可以改变的,其实str仅仅是一个引用对象,它指向一个字符串对象“abc”,第二行代码的含义是让str 重新指向了一个新的字符串“ bcd ”对象,而 abc ”对象并没有任何改变,只不过该对象已经成为一个不可及的对象罢了
2)StringBuffer/StringBuilder 表示的字符串对象可以直接进行修改。
3)StringBuilder 是 Java5 中引入的,它和 StringBuffer 的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有 方法 都没有被 synchronized 修饰,因此它的效率 理论上 也 比 StringBuffer 要高 。

String中的基本方法:

StringRedisTemplate 指定db读_常量池

(1 )、可变不可变

String:字符串常量,在修改时不会改变自身;若修改,等于重新生成新的字符串对象。
StringBuffer:在修改时会改变对象自身,每次操作都是对 StringBuffer 对象本身进行修改,不是生成新的对象;使用场景:对字符串经常改变情况下,主要方法: append insert ()等。

(2)、线程是否安全

String:对象定义后不可变,线程安全。
StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区大量数据。
StringBuilder :是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。

(3)、共同点

StringBuilder与 StringBuffer 有公共父类 AbstractStringBuilder( 抽象类 )。StringBuilder、 StringBuffer 的方法都会调用 AbstractStringBuilder 中的公共方法,如 super.append(...) 。只是 StringBuffer 会在方法上加 synchronized关键字,进行同步。最后,如果程序不是多线程的,那么使用StringBuilder 效率高于 StringBuffer 。

StringBuilder 方法:
s.setCharAt(2, 'w'); //把索引为2的字符变成'w',不能链式调用
s.append() //可以链式调用
s.reverse() //倒叙输出,可以链式调用
s.insert(0,'f') //插入
s.insert(0,'f').insert(1,'q') //可以链式调用,因为该方法调用了return this,把自己给返回了
s.delete(1,3) //删除区间[1,3),可以链式调用

 

数据类型之间的转换
(1) 字符串如何转基本数据类型?
调用基本数据类型对应的包装类中的方法parseXXX(String) 或 valueOf(String) 即可返回相应基本类型 。
(2)基本数据类型如何转字符串?
一种方法是将基本数据类型与空字符串(“”)连接(+)即可获得其所对应的字符串;另一种方法是调用 String类中的 valueOf() 方法返回相应字符串。