国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低?
目录 前言 StringBuffer悠久的历史 字符串 大厂面试题的开头 阿里P5-P7知识结构 最后 前言 在日常开发过程中,我们经常用到字符串,但是到具体应用的时候并不知道(String StringBuffer StringBuilder)在什么情况下会应用到;我们今天就深入浅出的说一下字符串、在什么情况下会用到。 StringBuffer悠久的历史 StringBuilder 问题档次并不低,如果仔细思考的话,这是一个历史悠久,并且至今仍在困扰很多程序员的问题。这是个字符串内存管理策略问题。几十年前 在C和Pascal的时代,就有字符串存储形式 是 \0 结尾还是 长度+内容的争论,这个问题严重影响了API的设计,内存的管理,甚至程序架构。 字符串 字符串是一种非常常用的 生命周期通常很短的对象,而且它的size是不固定的,长度为 1 或 1GB都有可能,导致内存管理非常麻烦复杂。 用长度+内容表示,每个串都要额外付出4个字节,用\0结尾吧,算长度就很麻烦,万一结尾忘了\0就要崩溃,选哪个好? 字符串的长度放哪里,放到起始指针的位置,还是起始指针的前面 如果放前面,那么字符串起始指针和内存块起始不一致怎么解决? 字符串拼接的时候把源串复制到目标串结尾,那么目标串剩余内存不够怎么办,重新分配要多一次赋值,频繁拼接性能有问题怎么办? 函数返回值如果是字符串