1.为什么拼接时使用StringBuilder 不用String ?
1.String 是不可变对象,拼接时会创建一个全新的String 对象来存放拼接后的结果
2.StringBuilder 是可变 字符序列,所有拼接操作都是在同一个对象里面完成,不会产生额外临时对象
StringBuilder.append() 可以理解为追加
2.既然StringBuilder 拼接更高效,为什么不全部使用StringBuilder 而要区分String 和StringBuilder 呢?
- 两者的设计目标完全不同(String 为不可变,安全,高效复用 为目的,StringBuilder 为可变,高效拼接 为目的,Java同时提供俩者是为了在不同的场景下平衡性能,安全,易用性
- String 的不可变提供了线程安全 (因为内容无法被修改,多个线程同时读取同一个String 对象时,不会出现读取到脏数据的情况
- 在HashMap ,HashSet 等集合的键必须是稳定的,如果键的内容可变,哈希值(hashCode )会跟着变,导致无法找到对应的value 【String 的hashCode 是根据内容计算的,当内容不变时,hashCode 不会变化,是哈希表的理想键】
- Java为了节省内存设计出字符串常量池 ,相同的字符串只存在一份,所有的引用都指向这个对象,防止出现在修改a的内容后b查看到的内容也被修改
- String a = "abc";
- String b = "abc";
- //a和b指向的是常量池的同一个“abc”对象,内存只占一份
复制代码
- 在网络传输,配置信息,密码存储 等场景中,希望用到的是一个不可变的对象-->String
- StringBuilder 内部有数组,指针等额外结构,内存占比比String 高
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |