找回密码
 立即注册
首页 业界区 业界 当八股文遇到实践--关于StringBuilder 和String ...

当八股文遇到实践--关于StringBuilder 和String

垢峒 5 天前
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查看到的内容也被修改
  1. String a = "abc";
  2. String b = "abc";
  3. //a和b指向的是常量池的同一个“abc”对象,内存只占一份
复制代码

  • 网络传输,配置信息,密码存储 等场景中,希望用到的是一个不可变的对象-->String
  • StringBuilder 内部有数组,指针等额外结构,内存占比比String 高

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

4 天前

举报

前天 10:03

举报

您需要登录后才可以回帖 登录 | 立即注册