百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

String、StringBuffer 和 StringBuilder 三者的区别

yuyutoo 2025-01-10 18:13 6 浏览 0 评论

String、StringBuffer 和 StringBuilder 区别

String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,效率低下,大量浪费有限的内存空间,每次生成对象都会对系统性能产生影响,效率低。

StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。

StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。

StringBuffer 适用于用在多线程操作同一个StringBuffer 的场景,如果是单线程场合 StringBuilder 更适合。

StringBuffer 同时最多只有一个线程可以运行这些方法,也就是保证了线程安全。 StringBuilder 没有线程安全机制,运行起来就不用考虑给线程加锁,所以运行效率会比 StringBuffer 要高。

StringBuffer是一个容器,长度可变,可以直接操作字符串,用toString方法变为字符串 。

1.存储

1)append(); //将指定数据加在StringBuffer末尾,返回值也是StringBuffer

StringBuffer sb = new StringBuffer(//可以加str);

StringBuffer sb1=ab.append(数据) //数据可以任何基本数据类型。

2)insert();// 插入

sb.insert(index ,数据);

2.删除

sb.delete(start ,end); //删除start到end的字符内容,这里的所有包含index的操作都是含头不含尾的

sb.deleteCharAt(index);//删除指定位置的字符

//清空StringBuffer缓冲区

sb=new StringBuffer();

sb.delete(0,sb.length());

3.获取

char c = sb.charAt(index);//获取index上的字符

int i = sb.indexOf(char)://获取char字符出现的第一次位置

4.修改

sb =sb.replace(start,end,string)//将从start开始到end的字符串替换为string;

sb.setCharAr(index ,char);//将index位置的字符变为新的char

5.反转 sb.reverse();//将sb倒序

在项目中创建类 Check ,验证字符串操作和字符串生成器操作的效率。

public class Check{

public static void main ( String [] args ){

String str ="";//创建空字符串

long starTime = System . currentTimeMillis();

//定义对字符串操作的起始时间

for ( int i =0; i <10000; i ++){

//利用 for 循环执行10000次操作

str = str +i;//循环追加字符串

long endTime = System . currentTimeMillis ();

//定义对字符串操作后的时间

long time=endTime - starTime ;

//计算对字符串执行操作的时间

System . out . println (" String 循环1万次消耗时间:"+ time );//将执行的时间输出

StringBuilder builder = new StringBuilder ("");//创建字符串生成器

starTime = System . currentTimeMillis ();//定义操作执行前的时间

for ( int j =0; j <10000; j ++){

builder . append ( j );//循环追加字符

}

endTime = System . currentTimeMillis ();

//定义操作后的时间

time= endTime - starTime;//追加操作执行的时间

System.out. println (" StringBuilder循环1万次 消耗时间 :"+ time )://将操作时间输出

运行结果:String 循环1万次消耗时间:179

StringBuilder 循环1万次消耗时间:0


StringBuffer 、 StringBuilder 、 String 的区别

String 对象类型:字符串常量,线程不安全,执行效率低。

StringBuilder 对象类型:字符串常量,线程不安全,执行效率高。


StringBuffer 对象类型:字符串常量,线程安全,执行效率中等。

StringBuffer 、 StringBuilder 、 String 类的适用场合:

(1)操作少、数据少,用 String 。

(2)单线程,操作多,数据多,用StringBuilder 。

(3)多线程,操作多,数据多,用 StringBuffer。简单的字符串修改时,时间非常快,三者区别不大,只有在大量的字符串修改时,才会显示出 StringBuffer 和 StringBuilder 的优势。


相关推荐

电脑 CMD 命令大全:简单粗暴收藏版

电脑CMD命令大全包括了许多常用的命令,这些命令可以帮助用户进行各种系统管理和操作任务。以下是一些常用的CMD命令及其功能:1、系统信息和管理...

电脑维修高手必备!8个神奇DOS命令,自己动手不求人

我相信搞电脑维修或者维护的基本都会些DOS的命令。就算Windows操作系统是可视化的界面,但很多维护检查是离不开DOS命令的。掌握好这些命令,你不仅能快速诊断问题,还能解决90%的常见电脑故障。下...

一个互联网产品总监的设计技巧总结 - 技术篇

古语:工欲善其事必先利其器。往往在利其器后我们才能事半功倍。从这个角度出发成为一个合格的产品经理你需要的是“利其器”,这样你才能产品的设计过程中如鱼得水,得心应手。有些产品经理刚入职,什么都感觉自己欠...

超详解析Flutter渲染引擎|业务想创新,不了解底层原理怎么行?

作者|万红波(远湖)出品|阿里巴巴新零售淘系技术部前言Flutter作为一个跨平台的应用框架,诞生之后,就被高度关注。它通过自绘UI,解决了之前RN和weex方案难以解决的多端一致性...

瑞芯微RK3568|SDK开发之环境安装及编译操作

1.SDK简介一个通用LinuxSDK工程目录包含有buildroot、app、kernel、device、docs、external等目录。其中一些特性芯片如RK3308/RV1108/R...

且看L-MEM ECC如何守护i.MXRT1170从核CM4

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M4内核的L-MEMECC功能。本篇是《简析i.MXRT1170Cortex-M7F...

ECC给i.MXRT1170 FlexRAM带来了哪些变化?

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7内核的FlexRAMECC功能。ECC是“ErrorCorrectingCode”...

PHP防火墙代码,防火墙,网站防火墙,WAF防火墙,PHP防火墙大全

PHP防火墙代码,防火墙,网站防火墙,WAF防火墙,PHP防火墙大全资源宝整理分享:https://www.htple.net...

从零开始移植最新版本(2023.10)主线Uboot到Orange Pi 3(全志H6)

本文将从零开始通过一步一步操作来实现将主线U-Boot最新代码移植到OrangePi3(全志H6)开发板上并正常运行起来。本文从通用移植思路的角度,展现是思考的过程,通过这种方式希望能让读者一通百...

可视化编程工具Blockly——定制工具箱

1概述本文重点讲解如何定制Blocklytoolbox上,主要包含如下几点目标:如何为toolbox不同类别添加背景色如何改变选中的类别的外观如何为toolbox类别添加定制化的css如何改变类别...

用户界面干货盘点(用户界面的基本操作方法)

DevExpressDevExpressWPF的DXSplashScreen控件在应用加载的时候显示一个启动界面。添加DXSplashScreen后,会默认生成一个XAML文件,当然,你也可...

Vue3+Bootstrap5整合:企业级后台管理系统实战

简洁而不简单,优雅而不失强大在当今快速发展的企业数字化进程中,高效、美观的后台管理系统已成为企业运营的核心支撑。作为前端开发者,我们如何选择技术栈,才能既保证开发效率,又能打造出专业级的用户体验?答案...

什么?这三款i.MXRT型号也开放了IAP API?

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1050/1020/1015系列ROM中的FlexSPI驱动API使用。今天痞子衡去4S店给爱车做保养了,...

OneCode基础组件介绍——表格组件(Grid)

在企业级应用开发中,表格组件是数据展示与交互的核心载体。OneCode平台自研的Grid表格组件,以模型驱动设计...

开源无线LoRa传感器(光照温湿度甲醛Tvoc)

本开源项目基于ShineBlinkC2M低代码单片机实现,无需复杂单片机C语言开发。即使新手也可很容易用FlexLua零门槛开发各种功能丰富稳定可靠的IoT硬件,更多学习教程可参考Flex...

取消回复欢迎 发表评论: