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

Java中String、StringBuffer、StringBuilder的区别以及使用总结

connygpt 2024-12-07 21:04 11 浏览


Java中,String、StringBuffer和StringBuilder都用于处理字符串,但在功能和性能上有显著的区别。了解这些区别有助于选择最适合特定情境的类型。在选择使用String、StringBuffer或StringBuilder时,应根据字符串操作的性能需求和线程安全要求来做出决定。


1、String、StringBuffer、StringBuilder的区别


1)是否可以改变


String的值是不可改变的,我们对字符串变量的拼接或重新赋值,是在字符串池中创建了新字符串,原本那个字符串的值并没有改变。
StringBuffer和StringBuilder中字符串中的值是可以改变的,而且在字符串拼接的情况下,不会产生临时的字符串。


2)线程安全


StringBuffer和StringBuilder中StringBuffer是线程安全的。但单线程中最好使用StringBuilder。StringBuilder虽不是线程安全的,但性能是比StringBuffer更高的。


2、使用场景


如果字符串值不会改变,推荐使用String,如果需要在多线程环境下安全地修改字符串,使用StringBuffer,如果在单线程环境下需要频繁修改字符串,使用StringBuilder是最佳选择。


1)如果不常去改变String的值,不进行许多字符串拼接等操作,就比较适合使用String,因为String是不可变的。
2)如果在一个单线程中,有许多字符串拼接等操作,使用StringBuilder就可以满足,并且它性能更好。
2)如果在多线程中,要考虑到线程安全问题,就只能用StringBuffer了


3、常用方法


StringBuilder与StringBuffer大致相同,但StringBuilder的方法没有同步,不是线程安全的。


1)String常用方法


方法

描述

charAt(int index)

返回指定索引处的 char 值。

compareTo(String anotherString)

按字典顺序比较两个字符串。

contains(CharSequence s)

当且仅当此字符串包含指定的 char 值序列时,
返回 true。

startsWith(String prefix)

测试此字符串是否以指定的前缀开始。

endsWith(String suffix)

测试此字符串是否以指定的后缀结束。

equals(Object anObject)

将此字符串与指定的对象比较。

getChars(int srcBegin,
int srcEnd,
char[] dst,
int dstBegin)

将字符从此字符串复制到目标字符数组。

hashCode()

返回此字符串的哈希码。

indexOf(int ch)

返回指定字符在此字符串中
第一次出现处的索引。

indexOf(int ch, int fromIndex)

返回在此字符串中第一次出现指定字符处的索引,
从指定的索引开始搜索。

indexOf(String str)

返回指定子字符串在此字符串中第一次出现处的索引。

indexOf(String str, int fromIndex)

返回指定子字符串在此字符串中第一次出现处的索引,
从指定的索引开始。

lastIndexOf(int ch)

返回指定字符在此字符串中最后一次出现处的索引。

lastIndexOf(int ch, int fromIndex)

返回指定字符在此字符串中最后一次出现处的索引,
从指定的索引处开始进行反向搜索。

lastIndexOf(String str)

返回指定子字符串在此字符串中最右边出现处的索引。

lastIndexOf(String str, int fromIndex)

返回指定子字符串在此字符串中
最后一次出现处的索引,
从指定的索引开始反向搜索。

length()

返回此字符串的长度。

matches(String regex)

告知此字符串是否匹配给定的正则表达式。

replace(char oldChar,
char newChar)

返回一个新的字符串,
它是通过用 newChar 替换此字符串中
出现的所有 oldChar 得到的。

replace(CharSequence target,
CharSequence replacement)

使用指定的字面值替换序列替换此字符串
所有匹配字面值目标序列的子字符串。

replaceAll(String regex,
String replacement)

使用给定的 replacement 替换此字符串所有匹配
给定的正则表达式的子字符串。

split(String regex)

根据给定正则表达式的匹配拆分此字符串。

split(String regex, int limit)

根据匹配给定的正则表达式来拆分此字符串。

substring(int beginIndex)

返回一个新的字符串,
它是此字符串的一个子字符串。

substring(int beginIndex,
int endIndex)

返回一个新字符串,
它是此字符串的一个子字符串。

toCharArray()

将此字符串转换为一个新的字符数组。

toLowerCase()

使用默认语言环境的规则
将此 String 中的所有字符都转换为小写。

toLowerCase(Locale locale)

使用给定 Locale 的规则
将此 String 中的所有字符都转换为小写。

toUpperCase()

使用默认语言环境的规则
将此 String 中的所有字符都转换为大写。

toUpperCase(Locale locale)

使用给定 Locale 的规则
将此 String 中的所有字符都转换为大写。


使用示例:https://www.cjavapy.com/article/63/


2)StringBuffer常用方法


方法

描述

append(data)

尾部添加

insert(index, data)

指定位置插入

delete(int start, int end)

删除一段字符串

deleteCharAt(int index)

删除指定位置的元素

replace(start, end, string)

在指定范围中替换字符串

setCharAt(int index, char ch)

用ch字符替换指定位置的字符(注意:void没有返回值)

charAt(int index)

根据索引获取字符

indexOf(String str)

根据字符串获取索引


使用示例:


public class Main {
  public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer("Hello");

        // 尾部添加
        buffer.append(" World");
        System.out.println("After append: " + buffer);

        // 指定位置插入
        buffer.insert(6, "Java ");
        System.out.println("After insert: " + buffer);

        // 删除一段字符串
        buffer.delete(6, 11);
        System.out.println("After delete: " + buffer);

        // 删除指定位置的元素
        buffer.deleteCharAt(5); // 删除空格
        System.out.println("After deleteCharAt: " + buffer);

        // 在指定范围中替换字符串
        buffer.replace(0, 5, "Hi");
        System.out.println("After replace: " + buffer);

        // 用ch字符替换指定位置的字符
        buffer.setCharAt(3, 'a');
        System.out.println("After setCharAt: " + buffer);

        // 根据索引获取字符
        char ch = buffer.charAt(3);
        System.out.println("Character at index 3: " + ch);

        // 根据字符串获取索引
        int index = buffer.indexOf("World");
        System.out.println("Index of 'World': " + index);
  }
}


3)StringBuilder方法


与StringBuffer基本一样的方法,但它不是线程安全。单线程中推荐使用。文档及使用代码可以参考上面StringBuffer。

相关推荐

自学Python,写一个挨打的游戏代码来初识While循环

自学Python的第11天。旋转~跳跃~,我~闭着眼!学完循环,沐浴着while的光芒,闲来无事和同事一起扯皮,我说:“编程语言好神奇,一个小小的循环,竟然在生活中也可以找到原理和例子”,同事也...

常用的 Python 工具与资源,你知道几个?

最近几年你会发现,越来越多的人开始学习Python,工欲善其事必先利其器,今天纬软小编就跟大家分享一些常用的Python工具与资源,记得收藏哦!不然下次就找不到我了。1、PycharmPychar...

一张思维导图概括Python的基本语法, 一周的学习成果都在里面了

一周总结不知不觉已经自学Python一周的时间了,这一周,从认识Python到安装Python,再到基本语法和基本数据类型,对于小白的我来说无比艰辛的,充满坎坷。最主要的是每天学习时间有限。只...

三日速成python?打工人,小心钱包,别当韭菜

随着人工智能的热度越来越高,许多非计算机专业的同学们也都纷纷投入到学习编程的道路上来。而Python,作为一种相对比较容易上手的语言,也越来越受欢迎。网络上各类网课层出不穷,各式广告令人眼花缭乱。某些...

Python自动化软件测试怎么学?路线和方法都在这里了

Python自动化测试是指使用Python编程语言和相关工具,对软件系统进行自动化测试的过程。学习Python自动化测试需要掌握以下技术:Python编程语言:学习Python自动化测试需要先掌握Py...

Python从放弃到入门:公众号历史文章爬取为例谈快速学习技能

这篇文章不谈江流所专研的营销与运营,而聊一聊技能学习之路,聊一聊Python这门最简单的编程语言该如何学习,我完成的第一个Python项目,将任意公众号的所有历史文章导出成PDF电子书。或许我这个Py...

【黑客必会】python学习计划

阅读Python文档从Python官方网站上下载并阅读Python最新版本的文档(中文版),这是学习Python的最好方式。对于每个新概念和想法,请尝试运行一些代码片段,并检查生成的输出。这将帮助您更...

公布了!2025CDA考试安排

CDA数据分析师报考流程数据分析师是指在不同行业中专门从事行业数据搜集、整理、分析依据数据作出行业研究评估的专业人员CDA证书分为1-3级,中英文双证就业面广,含金量高!!?报考条件:满18...

一文搞懂全排列、组合、子集问题(经典回溯递归)

原创公众号:【bigsai】头条号:程序员bigsai前言Hello,大家好,我是bigsai,longtimenosee!在刷题和面试过程中,我们经常遇到一些排列组合类的问题,而全排列、组合...

「西法带你学算法」一次搞定前缀和

我花了几天时间,从力扣中精选了五道相同思想的题目,来帮助大家解套,如果觉得文章对你有用,记得点赞分享,让我看到你的认可,有动力继续做下去。467.环绕字符串中唯一的子字符串[1](中等)795.区...

平均数的5种方法,你用过几种方法?

平均数,看似很简单的东西,其实里面包含着很多学问。今天,分享5种经常会用到的平均数方法。1.算术平均法用到最多的莫过于算术平均法,考试平均分、平均工资等等,都是用到这个。=AVERAGE(B2:B11...

【干货收藏】如何最简单、通俗地理解决策树分类算法?

决策树(Decisiontree)是基于已知各种情况(特征取值)的基础上,通过构建树型决策结构来进行分析的一种方式,是常用的有监督的分类算法。决策树算法是机器学习中的一种经典算法,它通过一系列的规则...

面试必备:回溯算法详解

我们刷leetcode的时候,经常会遇到回溯算法类型题目。回溯算法是五大基本算法之一,一般大厂也喜欢问。今天跟大家一起来学习回溯算法的套路,文章如果有不正确的地方,欢迎大家指出哈,感谢感谢~什么是回溯...

「机器学习」决策树——ID3、C4.5、CART(非常详细)

决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。本文将分三篇介绍决策树,第一篇介绍基本树(包括ID3、C4.5、CART),第二篇介绍Ran...

大话AI算法: 决策树

所谓的决策树算法,通俗的说就是建立一个树形的结构,通过这个结构去一层一层的筛选判断问题是否好坏的算法。比如判断一个西瓜是否好瓜,有20条西瓜的样本提供给你,让你根据这20条(通过机器学习)建立起...