Java基础之String,StringBuilder,StringBuffer

【Java 基础】String、StringBuilder、StringBuffer 到底该用谁? 本文详解Java中String、StringBuilder、StringBuffer的核心区别。String不可变,少量拼接适用,循环拼接性能极差;StringBuilder可变、性能最优但线程不安全,适配绝大多数业务场景;StringBuffer线程安全但性能偏低,仅用于多线程并发场景,同时解答了相关编译优化知识点与面试核心考点。 阅读详情

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。

运行速度

在这方面运行速度快慢为:StringBuilder > StringBuffer > String

String最慢的原因:

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。以下面一段代码为例:

String str="abc";
System.out.println(str);
str=str+"de";
System.out.println(str);

如果运行这段代码会发现先输出“abc”,然后又输出“abcde”,好像是str这个对象被更改了,其实,这只是一种假象罢了,JVM对于这几行代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

另外,有时候我们会这样对字符串进行赋值

String str="abc"+"de";
StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
System.out.println(str);
System.out.println(stringBuilder.toString());

这样输出结果都是“abcde”,但是String的速度却比StringBuilder的反应速度要快很多,这是因为第1行中的操作和

String str="abcde";

是完全一样的,所以会很快,而如果写成下面这种形式

String str1="abc";
String str2="de";
String str=str1+str2;

那么JVM就会像上面说的那样,不断的创建、回收对象来进行这个操作了。速度就会很慢。

线程安全

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

总结

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

【Java基础知识 8】String、StringBuilder、StringBuffer详解 一、String类简介 String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作,可以使用“+”连接其他对象,String类的部分源码如下 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. * 阅读详情

相关推荐

Jetson Orin Nano - SONY imx415 camera驱动开发

基于英伟达 Jetson orin nano 平台 imx415 camera驱动开发

hinewcc的博客 3241

StringBuilder操作

package com.company.project.builder;/** * StringBuilder用于解决字符串频繁修改带来的内存消耗 */public class StringBuilderDemo1 { public static void main(String[] args) { StringBuilder sb = new StringBuilder(

wahxsm的博客 421

CMOS 半加器和全加器&&数字集成电路&& Cadence Virtuoso

数字集成电路——半加器和全加器

计科小学生的博客 1万+

Java基础:String、StringBuffer、StringBuilder的区别

这篇文章主要介绍了String、StringBuffer、StringBuilder的区别详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。放假在家里休息,闲来无事,想巩固巩固自己的基础知识。Java基础这个我会一直更新的,希望大家关注 收藏 点赞。

weixin_42188778的博客 3万+

CentOS 9 Stream 上安装 MySQL 8.0+

根据提示进行设置,包括设置新的 root 密码、禁用远程 root 登录等。MySQL 在首次安装时会生成一个临时密码。这样就完成了 MySQL 8.0.37 的安装。这将安装最新的 MySQL 8.0 版本。

小强不是坑 1679

PCIe Gen4眼图测试实战:如何用示波器快速定位信号完整性问题(附避坑指南)

本文详细解析了PCIe Gen4眼图测试中的信号完整性诊断方法,通过示波器操作技巧和实战案例,帮助工程师快速定位抖动、反射等信号问题。特别针对眼图闭合、阻抗失配等常见问题提供了避坑指南和解决方案,提升高速信号调试效率。

weixin_29230773的博客 372

【Java基础】String,StringBuffer与StringBuilder的区别

字符串常量池 什么是字符串常量池? JVM为了减少字符串对象的重复创建,其维护了一块特殊的内存,这段内存被称为字符串常量池(存储在方法区中)。 具体实现 当代码中出现字符串时,JVM首先会对其进行检查。 如果字符串常量池中存在相同内容的字符串对象,则将这个对象的地址返回。 如果字符串常量池中不存在相同内容的字符串对象,则创建一个新的字符串对象并放入常量池。 new String(“str...

墩墩分墩 4019

染色体外环状DNA:肿瘤研究新方向

染色体外环状DNA(ecDNA)是癌症中活化原癌基因扩增的主要方式。区别于常染色体,这类生物大分子主要以环状的形式存在于细胞核当中,长度分布在103-106数量级,无中心粒。ecDNA序列中包含一个或者多个基因与调控元件,结构开放,转录活性强,相比于在棒状染色体结构基因,ecDNA的生物功能活性更强。癌症中,成环的基因区域拷贝数往往增高,而超过一半的高拷贝数事件是ecDNA驱动生成。...

blackjimmy的博客 765

java基础----String、StringBuffer、StringBuilder

1.String package com.henu; public class Demo05 { public static void main(String[] args) { /* * 字符串是常量;它们的值在创建之后不能更改,这是什么意思呢?其实就是说一旦这个字符串确定了, * 那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是...

乔治大哥的博客 646

AI智能体丨使用Coze一键生成中式养生视频,39 条作品涨粉 37.9 万!(附保姆级教程)

本文介绍如何利用扣子(Coze)AI智能体工作流高效制作中式养生短视频。该方案通过AI自动生成养生文案、古风插画素材、语音合成和视频剪辑,将传统制作流程从2-3小时缩短至1-2分钟。工作流包含文案创作、音频生成、图片素材制作和视频合成四大模块,采用大模型处理各环节内容,最终输出可直接导入剪映的草稿文件。特别适合希望快速批量制作文化氛围感强、兼具干货与视觉效果的养生内容创作者,效率提升近百倍。

李同学Lino的博客 3026

基于 STM32 的智能水表流量计设计与实现 —— 数据采集与远程传输

本文设计的基于 STM32 的智能水表流量计通过霍尔传感器实现流量采集,结合 STM32 的处理能力完成数据计算、存储与远程传输,具备计量精准、功耗低、可远程监控等特点。未来可优化方向:引入低功耗模式延长电池寿命,增加水质检测模块实现多参数监测,提升水务管理智能化水平。

weixin_42300449的博客 1027

【巩固Java基础】String、StringBuffer、StringBuilder

文章目录String类StringStringBuffer类:字符串缓冲区 String类 包位置:String位于java.lang包下 说明:所有字符串的字面值,都是此类的实例(也就是说,带双引号的,就是String类的对象 ☆) 字符串特点:☆ ①字符串的内容永不可变 String s = "abc"; s = s + "123"; // 那么为什么可以拼接字符串123呢? //1、String直接定义的字符串在常量池中,如果重新给s给值其实是常量池中重新开辟了一个空间给abc123,原来的abc不会

早上真起不来的博客 363

一文搞定 ST22 短转储 MEMORY_NO_MORE_PAGING:看懂 SAP Paging 机制,参数 rdisp/PG_SHM 与 rdisp/PG_MAXFS 怎么设才稳

SAP系统MEMORY_NO_MORE_PAGING错误通常源于Paging资源耗尽而非物理内存不足。关键排查点包括:通过ST22确认错误类型,ST02监控Paging使用情况,检查工作进程trace中的"no more free blocks"提示。解决方案建议将rdisp/PG_SHM和rdisp/PG_MAXFS设为相同值(如250000块≈2GB),使Paging完全在内存中运行。同时需优化易耗Paging的代码逻辑,如避免滥用EXTRACT命令和超大内存对象传输。典型案例如月末

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 331

Java基础:String、StringBuffer、StringBuilder介绍

String、StringBuffer、StringBuilder用法以及细节介绍

愿你我都能实现自己的梦想 1612

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java基础第一题关于String,StringBuilder,StringBuffer

String:不可变字符串,用final修饰,值不同每次都创建对象StringBuffer:可变字符串,线程安全,效率低StringBuilder:可变字符串,线程不安全,效率高。

okniwanle的博客 453

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java String、StringBuffer和StringBuilder类以及tcp/ip基础知识总结

Java String、StringBuffer和StringBuilder类以及tcp/ip基础知识总结

Hankins_Pan的博客 570

java基础之String、StringBuffer、StringBuilder

一、基本概念 String:字符串常量,字符串长度不可变。java中String是immutable(不可变的)。用于存放字符的数组被声明为final,因此只能赋值一次,不可再更改。 StringBuffer:字符串变量(Synchronized,线程安全)。如果要频繁的对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型学,可以调用StringBuffe...

清风自来 209

java基础之 String\StringBuffer\ StringBuilder

整理总结了String、StringBuffer、StringBuilder的内容和差别

oneouto的博客 914

Java基础,String,StringBuffer, StringBuilder

这三兄弟,可以说是面试没事就问… 这里我们看看JDK源码从而分析下。 1.String //JDK源码: public final class String private final char value[]; 咱们先看看String这个类,final修饰,不可重写,不可改变(常量),底层是char[],可以看做是char的包装类。 都不可变了,当然线程安全。 public class tes...

Songcz的博客 168

java基础之String,StringBuffer和StringBuilder

一、String(final类) 【字符串的本质:是字符数组或者是字符序列 】 字符串的两种创建方式 方式一:通过字面量或者字面量字符串通过”+”拼接的方式创建的String对象存储在常量池中,实际创建时如果常量池中存在,则直接返回引用,如果不存在则创建该字符串对象。String str="abc"; 方式二:使用构造函数创建字符串对象,则直接在堆中创建一个String对象。Str...

醒醒 161

java基础:String、StringBuilder和StringBuffer

字符串广泛运用在java编程中,在java中字符串属于对象,java提供了来。

qq_52200849的博客 1026

java基础——String StringBuffer StringBuilder

String : 不可变字符序列 StringBuffer : 可变字符序列 线程安全 StringBuilder :可变字符序列 线程不安全 JDK11 1.可变和不可变 String 底层存储结构为final 修饰的字节数组,因此不可修改 private final byte[] value; StringBuffer 和StringBuilder 都继承AbstractStringBuilder 底层使用的也是AbstractStringBuilder 中的字节数组,可变 /** * Th

m0_47191576的博客 225

Java基础:String,StringBuilder,StringBuffer

1. String String的值是不可变的,所以每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间 public class TestMain { public static void main(String[] args) { String str0 = "123"; String str1 = "123"; System.out.println(str0 == str1);//true

xueguchen的博客 915

【Java基础】String、StringBuffer、StringBuilder

我是 啤酒就辣条,一个Java。学而时习之,不亦说乎?希望通过博客的形式,总结、分享,梳理自己、帮助他人。另外,啤酒就辣条,味道不错哦~ 可变性 可变性是指引用所指向地址区域的内容是否可变。 下面通过示例来说明String是不可变的,StringBuffer、StringBuilder是可变的。 示例 public class StringTest { public static vo...

啤酒就辣条 150
上一篇: Java基础之IO与NIO
下一篇: 常用数据结构及原理分析
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值