String类,StringBuilder类,StringBuffer类

news2024/10/23 8:24:17

前言

String类,StringBuilder类,StringBuffer类都是java提供的定义字符串的类,下面是三种字符串类的异同介绍

String类:String类表示的字符串是是常量,一旦创建内容和长度都无法修改

StringBuilder类:StringBuilder类表示字符容器,创建后内容和长度可以随时修改,该类中方法没有实现线程安全

StringBuffer类:StringBuffer类表示字符容器,创建后内容和长度可以随时修改,该类中的方法实现了线程安全

总结StringBuilder类和StringBuffer类相比基本功能一致,但由于前者未实现线程安全,较后者具有了更强的性能;当我们在进行字符串操作时,如果该字符串仅仅用于数据类型的表示,选择String类即可,如果需要对字符串进行增加,删除操作,优先选择StringBuilder类和StringBuffer类,具体如果有大量字符串需要处理且不要求线程安全,优先考虑StringBuilder类,如果要求线程安全那优先选择StringBuffer类

String类

String类的包括String类的初始化和String中的方法学习

String类的初始化

由于String类创建的对象是字符串常量,所以对象一旦创建就不可以对其进行改变,如果我们给已赋值的对象重新赋值,系统会优先在字符长常量池中进行检索相应字符串,若找到,则直接指向该字符串常量的地址,若没找到,则在字符长常量池中分配一块空间存储该字符串,并让该对象直接指向该空间的地址 

其相应的构造方法有:

 

实际操作中会根据输入的值的类型选择相应的构造方法 

String类的常用方法

1. **构造方法**:


    * `String()`: 创建一个新的空字符串。
    * `String(byte[] bytes)`: 通过字节数组创建字符串。
    * `String(byte[] bytes, int offset, int length)`: 通过字节数组的一部分创建字符串。
    * `String(char[] value)`: 通过字符数组创建字符串。
    * `String(char[] value, int offset, int count)`: 通过字符数组的一部分创建字符串。

2. **长度方法**:


    * `int length()`: 返回字符串的长度。
3. **比较方法**:


    * `int compareTo(String anotherString)`: 按字典顺序比较两个字符串。
    * `boolean equals(Object anObject)`: 比较此字符串与指定对象是否相等。
    * `boolean equalsIgnoreCase(String anotherString)`: 按字典顺序比较两个字符串,不考虑大小写。
    * `int compareToIgnoreCase(String str)`: 按字典顺序比较两个字符串,不考虑大小写。
4. **查找方法**:


    * `int indexOf(int ch)`: 返回指定字符在字符串中首次出现的索引。
    * `int indexOf(int ch, int fromIndex)`: 从指定索引处开始,返回指定字符在字符串中首次出现的索引。
    * `int indexOf(String str)`: 返回指定子字符串在字符串中首次出现的索引。
    * `int indexOf(String str, int fromIndex)`: 从指定索引处开始,返回指定子字符串在字符串中首次出现的索引。
    * `lastIndexOf(int ch)`: 返回指定字符在字符串中最后一次出现的索引。
    * `lastIndexOf(int ch, int fromIndex)`: 从指定索引处开始反向搜索,返回指定字符在字符串中最后一次出现的索引。
    * `lastIndexOf(String str)`: 返回指定子字符串在字符串中最后一次出现的索引。
    * `lastIndexOf(String str, int fromIndex)`: 从指定索引处开始反向搜索,返回指定子字符串在字符串中最后一次出现的索引。
5. **获取子字符串**:


    * `String substring(int beginIndex)`: 返回一个新的字符串,它是此字符串的一个子字符串。
    * `String substring(int beginIndex, int endIndex)`: 返回一个新字符串,它是此字符串的一个子字符串。
6. **替换方法**:


    * `String replace(char oldChar, char newChar)`: 返回一个新的字符串,它是通过用新字符替换此字符串中的所有旧字符得到的。
    * `String replace(CharSequence target, CharSequence replacement)`: 使用指定的字面值替换序列替换此字符串中所有指定的字面值目标序列。
7. **转换方法**:


    * `char[] toCharArray()`: 将此字符串转换为一个新的字符数组。
    * `byte[] getBytes()`: 使用平台的默认字符集将此 `String` 编码为字节序列,并将结果存储在新的字节数组中。
    * `byte[] getBytes(String charsetName)`: 使用指定的字符集将此 `String` 编码为字节序列,并将结果存储在新的字节数组中。
8. **其他方法**:


    * `String trim()`: 返回字符串的副本,忽略前导空白和尾部空白。
    * `boolean startsWith(String prefix)`: 测试此字符串是否以指定的前缀开始。
    * `boolean endsWith(String suffix)`: 测试此字符串是否以指定的后缀结束。
    * `int hashCode()`: 返回字符串的哈希码。
    * `String toLowerCase()`: 使用默认语言环境的规则将此 `String` 中的所有字符转换为小写。
    * `String toUpperCase()`: 使用默认语言环境的规则将此 `String` 中的所有字符转换为大写。
    * `String concat(String str)`: 将指定的字符串连接到此字符串的结尾。

这只是String类中提供的一些常用方法。实际上,String类提供了许多其他有用的方法和常量,可以在 Java 官方文档中找到完整的方法列表和详细说明。

Stringbuffer类 

StringBuffer类在 Java 中用于表示可变的字符串。与String类不同,StringBuffer类的对象可以被修改,而不会生成新的对象。这使得StringBuffer在需要频繁修改字符串的场合更加高效。

以下是 `StringBuffer` 类中的一些常用方法:

1. **构造方法**:

    * `StringBuffer()`: 构造一个空字符串缓冲区,初始容量为 16 个字符。
    * `StringBuffer(int capacity)`: 构造一个指定容量的空字符串缓冲区。
    * `StringBuffer(String str)`: 构造一个包含指定字符串内容的字符串缓冲区。

2. **追加内容**:

    * `StringBuffer append(Object obj)`: 将指定的对象追加到此序列。
    * `StringBuffer append(String str)`: 将指定的字符串追加到此序列。
    * `StringBuffer append(char c)`: 将指定的字符追加到此序列。
    * 其他重载的 `append` 方法,可以追加不同类型的参数。

3. **插入内容**:

    * `StringBuffer insert(int offset, Object obj)`: 将指定对象插入此序列的指定位置。
    * `StringBuffer insert(int offset, String str)`: 将指定字符串插入此序列的指定位置。
    * `StringBuffer insert(int offset, char c)`: 将指定字符插入此序列的指定位置。

4. **删除内容**:

    * `StringBuffer delete(int start, int end)`: 移除此序列的一个子字符串。
    * `StringBuffer deleteCharAt(int index)`: 移除指定位置的字符。

5. **替换内容**:

    * `StringBuffer replace(int start, int end, String str)`: 使用给定字符串替换此序列的一个子字符串。

6. **反转内容**:

    * `StringBuffer reverse()`: 将此字符序列反转。

7. **设置字符**:

    * `void setCharAt(int index, char ch)`: 将给定索引处的字符设置为 `ch`。

8. **截取子序列**:

    * `StringBuffer substring(int start)`: 返回一个新的字符串缓冲区,它包含此序列当前内容的一个子序列。
    * `StringBuffer substring(int start, int end)`: 返回一个新的字符串缓冲区,它包含此序列当前内容的一个子序列。

9. **长度和容量**:

    * `int length()`: 返回长度(字符数)。
    * `int capacity()`: 返回当前容量。

10. **改变容量**:

    * `void ensureCapacity(int minimumCapacity)`: 确保容量至少等于指定的最小值。
    * `void setLength(int newLength)`: 设置字符序列的长度。

11. **比较**:

    * `boolean equals(Object anObject)`: 比较此字符串缓冲区与指定的对象是否相等。

12. **其他**:

    * `String toString()`: 返回此序列中数据的字符串表示形式。
    * `void capacity(int newCapacity)`: 调整此序列的容量。

这些只是 `StringBuffer` 类中提供的一些常用方法。实际上,`StringBuffer` 类提供了更多的方法和功能,可以在 Java 官方文档中找到完整的方法列表和详细说明。需要注意的是,由于StringBuffer 是线程安全的,因此它的某些操作可能比 StringBuilder慢,后者在单线程环境下是首选,因为它更快

一些注意

每个字符串常量都可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1498357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开源物联网平台】使用MQTT.fx模拟设备接入FastBee物联网平台

​🌈 个人主页:帐篷Li 🔥 系列专栏:FastBee物联网开源项目 💪🏻 专注于简单,易用,可拓展,低成本商业化的AIOT物联网解决方案 目录 一、接入步骤 1.1 创建产品&#xff…

物体检测-系列教程23:YOLOV5 源码解析13 (SPP层、Flatten模块、Concat模块、Classify模块)

😎😎😎物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 17、SPP模块 17.1 SPP类 SPP是一种特殊的池化策略,最初在YOLOv3-SPP中被使用…

学习clickhouse 集群搭建和分布式存储

为什么要用集群 使用集群的主要原因是为了提高系统的可扩展性、可用性和容错性。 可扩展性:当单个节点无法处理增加的负载时,可以通过添加更多的节点到集群来增加处理能力。这使得系统可以处理更大的数据量和更高的查询负载。可用性:在集群…

Java面试篇【并发编程】常见面试题(2024最新)

Java并发编程常见面试题 1.什么是线程和进程? 进程是操作系统分配资源的最小单位,各个进程之间占据独立的寻址空间,运行也是独立运行,进程间通信需要一些机制。进程间切换需要的开销较大。 线程是程序执行的基本单位&#xff0c…

力扣经典题目解析--删除链表的倒数第 N 个结点

原题地址:. - 力扣(LeetCode) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:h…

计算机网络 八股

计算机网络体系结构 OSI:物理层、数据链路层、网络层、运输层、会话层、表示层、应用层

Leetcoder Day38| 动态规划part05 背包问题

1049.最后一块石头的重量II 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那…

稀碎从零算法笔记Day11-LeetCode:有效的字母异位词

题型&#xff1a;字符串、哈希表、排序 链接&#xff1a;242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 …

opengl 学习(一)-----创建窗口

创建窗口 分类opengl 学习(一)-----创建窗口效果解析教程补充 分类 c opengl opengl 学习(一)-----创建窗口 demo: #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>using names…

.Net6使用JWT认证和授权

文章目录 目的实现案例一.项目所需包&#xff1a;二.配置项目 appsettings.json 文件&#xff1a;三.创建Model文件夹&#xff0c;添加AppConfig类和UserRole类1.AppConfig类获取appsettings.json文件中的值2.UserRole类用于区分用户信息和权限 四.主体代码案例&#xff1a;1.L…

Javaweb之Web后端开发总结的详细解析

4. Web后端开发总结 到此基于SpringBoot进行web后端开发的相关知识我们已经学习完毕了。下面我们一起针对这段web课程做一个总结。 我们来回顾一下关于web后端开发&#xff0c;我们都学习了哪些内容&#xff0c;以及每一块知识&#xff0c;具体是属于哪个框架的。 web后端开…

想用Python做自动化测试?Python反射机制的应用!

通常&#xff0c;我们操作对象的属性或者方法时&#xff0c;是通过点“.”操作符进行的。例如下面的代码&#xff1a; class Person: type "mammal"def __init__(self, name): self.name namedef say_hi(self): print(Hello, my name is, self.n…

vue页面刷新问题:返回之前打开的页面,走了create方法(解决)

vue页面刷新问题&#xff1a;返回之前打开的页面&#xff0c;走了create方法&#xff08;解决&#xff09; 直接上图&#xff0c; 我们在开发的时候经常会复制粘贴&#xff0c;导致vue文件的name没有及时修改 我们需要保证name和浏览器的地址一致&#xff0c;这样才能实现缓…

面试题个人总结(面经)

自我介绍 你好&#xff0c;我叫XXX&#xff0c;是今天面试初级蓝队的人员&#xff0c;我毕业于XXXX&#xff0c;专业为网络空间安全,我曾经在XXXXX实习过&#xff0c;有过大概一年左右的工作经验&#xff0c;还有过一定的护网经验&#xff0c;去年在XXX厂商护过网&#xff0c;…

大型网站架构演化总结

本文图解大型网站架构演化。 目录 1、单一应用服务阶段 2、应用与数据服务分离阶段 3、利用缓存提高性能阶段 4、应用服务集群阶段 5、数据库读写分离阶段 6、反向代理与CDN加速阶段 7、分布式数据库阶段 8、 NoSQL与搜索引擎阶段 9、业务拆分阶段 10、分布式服务阶…

电脑要用多少V的电源?电脑电源输入电压是市电

台式电源的输出电压是多少&#xff1f; 电脑电源输出一般有三种不同的电压&#xff0c;分别是&#xff1a; 12V、5V、3.3V。 电脑电源负责给电脑配件供电&#xff0c;如CPU、主板、内存条、硬盘、显卡等&#xff0c;是电脑的重要组成部分。 工作电流根据不同的硬件及其使用状…

从仓储管理看3C电子行业智慧物流的优势

仓储管理是智慧物流的重要组成部分。通过引入自动化、智能化的仓储管理系统&#xff0c;3C电子企业可以实现库存的精准管理、快速分拣和高效配送。这不仅减少了库存成本&#xff0c;还大大提高了运营效率和市场响应速度。 传统的仓储管理依赖于人工操作和纸质文档记录&#xff…

Java项目:37 springboot003图书个性化推荐系统的设计与实现

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot003图书个性化推荐系统的设计与实现 管理员&#xff1a;首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退换图书…

unity学习(50)——服务器三次注册限制以及数据库化角色信息5--角色信息数据库化收尾

上一节内容结束后确实可以写入文件了&#xff0c;但还有两个问题&#xff1a; 1.一个是players.txt中&#xff0c;每次重启服务器&#xff0c;当注册新账号创建角色时&#xff0c;players.txt之前内容都会清空。 2.players.txt之前已经注册3次的账号&#xff0c;新注册的角色…

做接口测试的流程一般是怎么样的?2024全网最全教程(建议收藏)

在讲接口流程测试之前&#xff0c;首先需要给大家申明下&#xff1a;接口测试对于测试人员而言&#xff0c;非常非常重要&#xff0c;懂功能测试接口测试&#xff0c;就能在企业中拿到一份非常不错的薪资。不信请狠狠点击下方链接&#xff08;下方链接也有接口学习方法及学习资…