这是一个历史悠久,并且至今仍在困扰很多程序员的问题。

这是个字符串内存管理策略问题。

几十年前 在C和Pascal的时代,就有字符串存储形式 是 \0 结尾还是 长度+内容的争论,这个问题严重影响了API的设计,内存的管理,甚至程序架构。

字符串是一种非常常用的 生命周期通常很短的对象,而且它的size是不固定的,长度为 1 或 1GB都有可能,导致内存管理非常麻烦复杂。

用长度+内容表示,每个串都要额外付出4个字节,用\0结尾吧,算长度就很麻烦,万一结尾忘了\0就要崩溃,选哪个好

字符串的长度放哪里,放到起始指针的位置,还是起始指针的前面

如果放前面,那么字符串起始指针和内存块起始不一致怎么解决

字符串拼接的时候把源串复制到目标串结尾,那么目标串剩余内存不够怎么办,重新分配要多一次赋值,频繁拼接性能有问题怎么办

函数返回值如果是字符串,那么这个串是调用者分配内存还是被调用者分配,谁来负责释放。

如果调用者分配,那么调用者怎么知道字符串将有多长。

频繁分配释放大小各异的字符串,会不会导致内存碎片化

对于小字符串是分配在堆上还是栈上

怎么把常量串和变量串分别处理

如果设计面向对象的字符串,字符串加法怎么定义,是在原来对象上加,还是生成一个新对象

如果每加一次都生成新对象会不会导致构造析构太频繁

如果是托管语言会不会太频繁GC

要不要设计单独的辅助类来解决字符串拼接问题

那这个辅助类怎么设计,要不要考虑线程安全

如果考虑线程安全的话,怎么兼顾性能

有帮到你的点赞、收藏一下吧

需要更多教程,微信扫码即可

StringBuffer,StringBuilder区别是啥相关推荐

  1. 国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低?

    这是一个知乎上面很火的问题(https://www.zhihu.com/question/50211894 ),下面是我关于这个问题的回答,截止今天,这个答案收获了500+赞和70+评论. 原答案 这 ...

  2. 原创|国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低?...

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 224 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 这是一个知乎上面很火 ...

  3. 国内Java面试总是问StringBuffer,StringBuilder区别是啥?

    原答案 这个问题只是开个场,热个身而已啊. StringBuffer,StringBuilder区别是啥? 什么是线程安全? 如何保证线程安全? 什么是锁?死锁? synchronized的实现原理是 ...

  4. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  5. 面试(2)——StringBuffer StringBuilder String /==与equals

    最近有小伙伴问我面试的时候,经常会问些什么问题,其实面试的时候,面试官无非就是面试一些基础,怎么问呢,就是会根据你简历上所写的技术点进行询问,由浅到深.你可能会说,那这样我面试的时候少写一些,那问你的 ...

  6. String, StringBuffer,StringBuilder

    String, StringBuffer,StringBuilder的区别 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,都实现了CharSe ...

  7. String StringBuffer StringBuilder区别与联系

    String     StringBuffer     StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...

  8. String StringBuffer StringBuilder的区别

    简单的事情做到极致也是一种能力. 首先,说一下目前我还没进行整理的情况下,我的理解: String 不可修改 修改后相当于又新创建创建一个字符串 比如: String a = "abc&qu ...

  9. Java中的String,StringBuffer,StringBuilder有什么区别?

    相信有很多同学都是经常使用String的,或者也或多或少的听说过StringBuffer,StringBuilder,那么在经常遇见的面试题中(标题),到底这三个的区别是什么呢?让我们来一探究竟! S ...

  10. String,StringBuffer,StringBuilder三者的异同

    String,StringBuffer,StringBuilder三者的异同:? String:不可变的字符序列;底层使用char[]存储(用final修饰) StringBuffer:可变的字符序列 ...

最新文章

  1. 不写代码,用图形界面搞机器学习:MIT发布“全球最快AutoML”,刷新DARPA比赛成绩...
  2. android 自定义apk名,Android Studio多渠道打包、自定义打包APK名称
  3. python socket tcp_python socket 模拟tcp通讯
  4. PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)
  5. 写出一段代码将链表中的两个节点位置互换位置_面试 leetcode 算法专题系列(二)—— 链表...
  6. Jupyter notebook 导入和卸载 conda 虚拟环境
  7. QT学习笔记(七):定时器事件的3种常用使用方式
  8. hbase-1.3.2安装
  9. 2000以内!一加Nord 2渲染图曝光:搭载联发科天玑1200
  10. 天津市全国计算机等级报名时间,天津市2018年全国计算机等级考试报名时间及地点...
  11. 硬盘GPT分区与MBR分区的区别
  12. Python-----列表,字典,集合生成式,生成器
  13. 压缩文件下载后无法打开问题解决方法
  14. 腾讯校招智力题-赛马问题-毒药与老鼠
  15. 2019支付宝小程序技术专场招募
  16. 超搜索引擎BBMAO
  17. 初学者习字如何选择练字用的辅助格子纸?
  18. 关于redis服务的代码编码
  19. 2023山西大学计算机考研信息汇总
  20. ccf试题1:数列分段

热门文章

  1. 一加8系列获得认证:骁龙865加持 离上市又近一步
  2. 华为Mate X 5G再次秒售罄;全新折叠屏手机渲染图曝光:确实不一般!
  3. 11.11京东全球好物节战报出炉!苹果、华为全员卖疯...
  4. 交付量强劲增长 特斯拉营收却将出现7年来首次下滑
  5. 已经人均5G了?5G手机没人买,iPhone 11没5G该不该被嘲讽?
  6. 华为方舟编译器正式上线 已经拥有45家合作伙伴
  7. 上市在即!华为Mate 20 X 5G版证件照公布:国行首款5G手机
  8. 网易回应“公开叫卖网易邮箱账号”:不涉及用户敏感信息
  9. Android 完整漂亮问卷、试卷 -- 支持单选、判断、不定项
  10. Java基础整理(二)