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

String、StringBuffer 和 StringBuilder 三者的区别

yuyutoo 2025-01-10 18:13 1 浏览 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 的优势。


相关推荐

上位机程序如何保存配置信息

上位机程序通常都会需要保存一些用户的配置信息。比如目标PLC的IP地址、变量信息等。这些信息需要上位机程序在运行时将其保存。保存用户配置信息的方法有很多,比如设置文件、INI文件、XML文件和本地数据...

#X5效果器回声调试教程

大家好,今天教大家调回声按键。·按一下是回声相位和回声效果音量。·按一下下键,下面是回声直达声相位和音量。直达声只直接体现话筒的声音和回声效果,根据现场环境边调边试合适就好。·按第二下显示回声预延迟,...

对象存储、文件存储和块存储

对象存储定义:以对象为单位来处理、存储和检索数据,每个对象包含数据本身、元数据以及一个全局唯一的标识符,通过API调用进行数据读写,通常基于HTTP或HTTPS协议。优点:...

SINAMICS S200 常见问题(调试篇)

01概述...

SQLSERVER:存储过程和函数

在SQLServer中,存储过程和函数是数据库编程的基础。它们允许开发者编写SQL脚本来执行复杂的操作,同时提供了代码重用和逻辑封装的能力。下面将通过一些实例来详细介绍存储过程和函数的使用。...

PVE8.0连接并使用windows server 2019上的IPSAN存储

本文将演示如何在Windowsserver2019服务器中部署IP-SAN存储并在PVE8.0中正确连接IPSAN存储。如果这篇文章能为大家带来帮助,希望大家能慷慨点赞,并持续关注我的账号,未来我...

【Oracle】Package 存储过程编写以及其他实用技术

这篇文章是之前自己在公司的一篇技术分享,搬过来就不提供脚本了!...

数据库|数据库存储过程相关学习

哈喽,你好啊,我是雷工!前面学习记录了数据库中视图的相关内容...

轻松达成4K160帧,威联通NAS补帧教程丨调用第三方开启超分和补帧

前言大家好,我是加勒比考斯。...

群晖NAS(一)存储管理介绍

第1章前言加更一期SMARTX备份。近期群晖厂商那边借了一台群晖3621xs+的NAS存储测试,想着SMARTX里面带备份功能,然后做下实验,怎么把SMARTX备份到群晖存储上。以下此架构图其中19...

mysql存储过程入门及基本用法总结

现在学习存储过程,有一种四九年入国军的感觉,之前看公司计费相关的业务上还在用,所以还是抽时间简单学习了一下,这里记录一下。说到存储过程,它的意义自不必提,各大老牌数据库都支持,而且经常以此来挤兑一些还...

存储过程与函数

存储过程与函数MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可。...

【测试】JMeter调用存储过程

JMeter是可以直接调用SQL语句或者存储过程来完成测试的,这次就给大家讲一下如何通过调用MySQL存储过程完成测试。首先我们先创建一个数据库连接池的配置信息:如上图所示,已填写的参数描述如下:Na...

ADO.NET调用带输入输出的存储过程

在ADO.NET中调用带输入和输出参数的存储过程,通常使用SqlCommand对象来执行存储过程,并通过其Parameters集合来设置和获取参数值。以下是一个示例,展示了如何调用一个带输入和输出参数...

JAVA大厂面试题——String、StringBuffer 和 StringBuilder

一、类型String是只读字符串,它不是基本数据类型,是一个对象,是一个final类型的字符数组,所引用的字符串不能被改变,定义后,无法在增删改,而StringBuffffer和StringBuil...

取消回复欢迎 发表评论: