String、StringBuffer、StringBuilder

1.String
String 赋值的两种方式:
String a = “a”;
String a = new String(“a”);
第一种赋值方式可能创建一个或没创建对象,第二种方式可能创建一个或两个对象。
第一种赋值方式JVM首先会在常量池中寻找是否已经存在字符串 “a”如果存在不在创建 直接引用,如果不存在会在常量池中创建字符串 a 并引用,也就是说之后再有其它引用去引用“a”,便不会在创建,直接去引用字符串 “a”。常量池位于方法区,方法区的数据和栈一样是共享的。
第二种赋值方式会在堆里面创建一个对象 “a”,然后会去查看常量池中是否有这个字符串“a”,如果没有还会在常量池中创建字符串“a”,如果有不再创建。堆中的数据不会共享。
示例:
在这里插入图片描述

上一段代码说明了当“a” + "b"会拼接成“ab”然后去常量池中寻找,如果有多个引用,会一致指向 “ab”,当使用引用或是方法进行算术运算时,底层会调用StringBuilder创建一个新的对象。
intern() 调用该方法会使对象优先去常量池中寻找地址值会指向常量池,常量池中没有再回到堆中。详细使用请查阅API文档

2.StringBuffer(线程安全的)
StringBuffer sb = new StringBuffer(“a”);
append():追加字符串
toString():转化为String类型
insert(位置 , 参数):将参数插入到指定位置

3.StringBuilder(线程不安全的)
java.lang.StringBuilder是JDK5.0版本新增的类。轻量级实现,线程不安全。
使用方法和StringBuffer一样,这里不再赘述。

4.String 类和 StringBuffer 类和 StringBuilder 类的对比
String:
String是不可变的对象,在每次对String类型进行改变时,其实都等同于生成了一个新的String对象,然后指向新的String对象。
StringBuffer:
StringBuffer是可变的字符串,在每次对StringBuffer对象的改变时,会对StringBuffer对象本身进行操作,再改变对象引用,而不是生成新的对象。
StringBuilder:
StringBuilder等价于StringBuffer,不同之处在于StringBuilder是线程不安全,效率更高。

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页