面试题:String,StringBuilder,StringBuffer三者的区别
摘要:总结Java中的String,StringBuilder,StringBuffer三者的区别和联系,介绍后两者的扩容机制。
Java中的String,StringBuilder,StringBuffer这三个类之间的区别主要集中在两个方面,即运行速度和线程安全这两方面。
String:字符串常量,这就导致每次对String的操作都会创建新的String对象,不仅效率低,而且浪费有限的内存空间;故适用于少量的字符串操作的场景。
StringBuilder:线程不安全,适用于单线程下在字符缓冲区进行大量操作的情况。
StringBuffer:线程安全,适用于多线程下在字符缓冲区进行大量操作的情况。
一般情况下,操作执行速度从快到慢依次是:StringBuilder > StringBuffer > String。这种比较是相对的,不是绝对的。String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,进行值操作的时候,是需要重新创建String对象的,但后两者的对象是变量,是可以更改的。
StringBuilder 和 StringBuffer 扩容机制:需要的最小容量(已经存储的数据长度+准备存储的数据的长度)是否大于底层char数组的长度,如果大于就按照原来长度*2+2扩容。
为什么扩容时要+2?请注意入参capacity的数据类型是int,故传入参数可以是0,在参数是0的情况下,0<<1运算结果也是0,导致以0初始化数组的时候必然会报错,所以从设计的安全性视角考虑,防止出现报错,选择了+2。
/**
* Constructs a string builder with no characters in it and an
* initial capacity specified by the {@code capacity} argument.
*
* @param capacity the initial capacity.
* @throws NegativeArraySizeException if the {@code capacity}
* argument is less than {@code 0}.
*/
public StringBuilder(int capacity) {
super(capacity);
}
初始化StringBuilder的容量。构造器StringBuilder() 会创建一个默认大小(通常是16)的字符数组。在使用中,如果需要扩容,就需要重新分配内存,创建一个更大的char数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,可以在创建 StringBuilder 的时候指定大小,从而避免在容量不够的时候自动扩容,以提高性能。
示例:StringBuilder sb = new StringBuilder(700)。
作为程序员,要有“刨根问底”的精神。知其然,更要知其所以然。这篇文章希望能抽丝剥茧,还原背后的原理。
面试题:String,StringBuilder,StringBuffer三者的区别的更多相关文章
- java面试题----String、StringBuffer、StringBudder区别
面试题1 - 什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好? 面试题2 - 请说出下面程序的输出. class ...
- java中String StringBuilder StringBuffer比较和效率(性能)测试
string stringbuilder stringbuffer三者的区别 从JDK源码看,String.StringBuilder.StringBuffer都是存放在char[] 数组字符串. 简 ...
- Java中的String,StringBuilder,StringBuffer三者的区别?
package com.aaa.zxf.ajax.test; /** * 弄清楚 string stringBuilder StringBuffer 三者之间的关系? * * * 一. 三者都是用来对 ...
- String,StringBuilder,StringBuffer三者的区别
参考 String,StringBuilder,StringBuffer三者的区别 这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 1.运行速度 首先说运行速度,或者说是执行速 ...
- 33-Java中的String,StringBuilder,StringBuffer三者的区别
转载自:https://www.cnblogs.com/su-feng/p/6659064.html StringBuilder 详解 (String系列之2) Java中的String,String ...
- String StringBuilder StringBuffer区别
String StringBuilder StringBuffer String类是final类,不可以被继承,且它的成员方法也是final方法,当一个字符串对象进行操作操作时,任何的改变不会影响到这 ...
- Java—String,StringBuffer,StringBuilde区别和操作
Java语言有关字符串的类有三种 java.lang.String:一般作为简单字符串类型 java.lang.StringBuffer:字符串缓冲区 java.lang.StringBuider:字 ...
- String, StringBuilder, StringBuffer问题
1. 区别 String为字符串常量,而StringBuilder和StringBuffer都是字符串变量,其中StringBuilder线程非安全,StringBuffer线程安全. 每次对 Str ...
- JDK源码分析系列---String,StringBuilder,StringBuffer
JDK源码分析系列---String,StringBuilder,StringBuffer 1.String public final class String implements java.io. ...
- 深入源码剖析String,StringBuilder,StringBuffer
[String,StringBuffer,StringBulider] 深入源码剖析String,StringBuilder,StringBuffer [作者:高瑞林] [博客地址]http://ww ...
随机推荐
- VUE-CLI 创建VUE3项目
前言 第一篇当然是如何安装vue3 安装步骤 第一步安装vue-cli npm install -g @vue/cli // vue --version 第二步创建项目 vue create hell ...
- C# 之事件及event关键字存在的意义
总结:event关键字的作用,用于不公开发布器中委托对象实例,对事件委托对象进行保护,禁止外部调用. 1.C#事件举例说明 1 //事件及event关键字存在的意义 2 class Program 3 ...
- 鸿蒙开发 HarmonyOS DevEco Studio 常用快捷键
前言 做 HarmonyOS 鸿蒙开发离不开 DevEco Studio 开发工具, DevEco Studio 是基于 IntelliJ IDEA Community 开源版本打造,所以默认的快捷键 ...
- ModuleNotFoundError: No module named '_bz2'
前言 运行 python 报错:ModuleNotFoundError: No module named '_bz2' when building python 解决 安装在 Ubuntu/Debia ...
- RocketMq安装踩坑:docker0网桥冲突
前言 最近项目用到了RocketMq,需要在Cento7系统上搭建一套集群环境用于测试.整个的环境搭建过程中,我遇到了一个比较初级的问题:启动RocketMq的broker失败. 问题经过 首先我 ...
- Netty源码—6.ByteBuf原理一
大纲 1.关于ByteBuf的问题整理 2.ByteBuf结构以及重要API 3.ByteBuf的分类 4.ByteBuf分类的补充说明 5.ByteBuf的主要内容分三大方面 6.内存分配器Byte ...
- GIS空间索引技术
地理信息系统(Geography Information System,简称GIS)的主要任务之一是有效地检索空间数据及快速响应不同用户的在线查询.地理空间索引技术和方法是GIS的关键技术.是快速高效 ...
- macOS 和 Windows 操作系统下如何安装和启动 MySQL / Redis 数据库
你好,我是 Kagol,个人公众号:前端开源星球(欢迎关注我,分享更多前端开源知识). TinyPro 后台管理系统的 NestJS 后端依赖 MySQL 和 Redis 数据库,本文主要带大家安装和 ...
- 网鼎杯朱雀组-GO
这里猜测是魔改base64 尝试替换回去 import string import base64 new="XYZFGHI2+/Jhi345jklmEnopuvwqrABCDKL6789ab ...
- <HarmonyOS第一课05>从简单的页面开始
ArkUI是HarmonyOS应用的UI开发框架,它提供了一套完整的基础设施,包括简洁的UI语法.丰富的UI功能(组件.布局.动画以及交互事件),以及实时界面预览工具等.ArkUI支持开发者进行可视化 ...