首页 > 其他分享 >String、StringBuilder 和 StringBuffer 的区别

String、StringBuilder 和 StringBuffer 的区别

时间:2024-11-22 13:17:52浏览次数:3  
标签:String StringBuilder 线程 StringBuffer 字符串 可变性

Shiro视频地址:

https://www.bilibili.com/video/BV1YVUmYJEPi/?spm_id_from=333.999.0.0&vd_source=14d27ec13a4737c281b7c79463687112

SpringBoot视频地址:

https://www.bilibili.com/video/BV1nkmRYSErk/?spm_id_from=333.999.0.0&vd_source=14d27ec13a4737c281b7c79463687112

SpringCloudAlibaba视频地址:

https://www.bilibili.com/video/BV1cFDEYWEkY/?vd_source=14d27ec13a4737c281b7c79463687112

Springboot+Vue视频地址:

https://www.bilibili.com/video/BV1JLSEYJETc/?spm_id_from=333.999.0.0&vd_source=14d27ec13a4737c281b7c79463687112

在Java中,StringStringBuilderStringBuffer 是处理字符串的三个不同的类,它们各自有不同的用途和特点:

1. String

  • 不可变性String 对象是不可变的,这意味着一旦创建了 String 对象,就不能改变它的内容。任何修改都会生成一个新的 String 对象。
  • 适用场景:由于其不可变性,String 通常用于不需要修改的字符串场景,例如作为参数传递、返回值等。
  • 性能:对于少量的字符串操作,String 是一个好的选择,因为它的不可变性使得它在某些情况下可以被缓存和重用。

2. StringBuilder

  • 可变性StringBuilder 对象是可变的,这意味着可以在不生成新对象的情况下修改 StringBuilder 对象的内容。
  • 线程不安全StringBuilder 不是线程安全的,这意味着它在单线程环境中使用时效率更高。
  • 适用场景:适用于需要频繁修改字符串内容的场景,例如循环中拼接字符串。
  • 性能:在频繁进行字符串拼接操作时,StringBuilderString 更高效,因为它避免了每次修改都创建新对象的开销。

3. StringBuffer

  • 可变性:与 StringBuilder 类似,StringBuffer 对象也是可变的。
  • 线程安全StringBuffer 是线程安全的,这意味着它在多线程环境中可以安全使用,但这也带来了性能上的开销。
  • 适用场景:如果你需要在多线程环境中进行字符串拼接操作,StringBuffer 是一个合适的选择。
  • 性能:由于线程安全的特性,StringBufferStringBuilder 慢,因为它需要同步操作以确保线程安全。

总结

  • 使用 String 当你需要一个不可变的字符串,并且不需要进行修改。
  • 使用 StringBuilder 当你在单线程环境中需要频繁修改字符串内容。
  • 使用 StringBuffer 当你需要在多线程环境中修改字符串内容,并且需要保证线程安全。

在实际开发中,选择哪一个类取决于你的具体需求,包括是否需要线程安全、是否需要频繁修改字符串等。

标签:String,StringBuilder,线程,StringBuffer,字符串,可变性
From: https://blog.csdn.net/QQ903275718/article/details/143951058

相关文章

  • typeof('abc')和typeof 'abc'都是string, 那么typeof是操作符还是函数?
    typeof是一个操作符(operator),而不是函数。虽然它的语法看起来像函数调用typeof(something),但这只是可选的语法。括号在这里不是必需的,并且不改变typeof的行为。使用括号时,括号内的表达式会被求值,然后typeof操作符作用于结果值。核心区别在于:函数调用需要一个函数对象和参......
  • String类为什么是不可变的,为什么用final修饰?
    曾经,在学习的途中,我时常感到疑惑,那就是String的不可变。首先,什么是不可变呢,例子如下:publicclassImmutableExample{publicstaticvoidmain(String[]args){Stringstr1="Hello";Stringstr2=str1.concat("World");System.out.p......
  • [Java] String的hashCode方法
    简述java/lang/String#hashCode是用途极广的方法,其源码实现也存在一定变迁。其位于JRE的rt.jar包内OpenJDKOpenJDK8-b120版~9-b00版:=OracleJDK1.8.0-261jdk/jdk/src/share/classes/java/lang/String.javahttps://github.com/openjdk/jdk/blob/jdk8-b120/......
  • string,字符串使用指南
    string创建创建一个字符串或者字符串数组如下用cin输入,可以读一整串字符直到空格或换行才结束#include<iostream>usingnamespacestd;constintN=9;intmain(){ strings; stringstrs[N]; cin>>s; for(inti=0;i<N;i++) { cin>>strs[i];......
  • SQLI LABS | Less-49 GET-Error Based-String-Blind-ORDER BY CLAUSE
    关注这个靶场的其它相关笔记:SQLILABS——靶场笔记合集-CSDN博客0x01:过关流程输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来): http://localhost/sqli-labs/Less-49/本关考察的其实是ORDERBY后的注入(虽然它被归结到了堆叠注入中,但其实它并不是)。......
  • streamstring类介绍
    std::stringstream是C++标准库中提供的一个类,定义在头文件<sstream>中。它是基于字符串的流(stream),允许像操作输入流(std::cin)或输出流(std::cout)那样,操作字符串内容。std::stringstream是std::iostream的派生类,支持同时进行字符串解析(输入)和字符串构造(输出)。核心概念std:......
  • 构造方法,static,final关键字,字符串拼接,基本数据类型、包装类转String,String转基本
    1.构造方法的特点1.每一个类都至少有一个构造方法,默认是无参的构造方法。一旦写了有参的构造方法,那么无参的构造方法就丢失了,需要自己显式的写出无参构造方法。一般只要是显式写出构造方法,无参的构造方法是必须要构造的。2、构造方法,方法名必须和类名保持一致,并且没有返回值,......
  • [perl] perl string substitution
     require5.013002;#orbetter:useSyntax::Constructqw(/r);print"bla:",$myvar=~s/a/b/r,"\n";See perl5132delta:Thesubstitutionoperatornowsupportsa /r optionthatcopiestheinputvariable,carriesoutthesubstitu......
  • 调用Exe程序并且出现界面 CreateProc(ProcessName:String)
    FunctionGetProcessHandleAsName(Name:String):THandle;VarHd,Hs:THandle;dExit:Cardinal;Tmp,Tmp1:String;Lp:TProcessEntry32;beginResult:=0;Lp.dwSize:=sizeof(TProcessEntry32);Hd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);ifProcess32First(Hd,Lp)thenRepea......
  • stringRedisTemplate 异步操作的问题记录
    一、问题背景StringRedisTemplate使用stringRedisTemplate.opsForValue().set时,会出现set之后立马get获取值,发现获取不到set进去的值。二、问题原因1、在使用redisson的情况下,stringRedisTemplate.opsForValue().set操作会是异步操作,造成。你在set之后,立马get获取值的时候会......