String类,StringBuilder类,StringBuffer类

前言

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慢,后者在单线程环境下是首选,因为它更快

一些注意

每个字符串常量都可以

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.7练习题解

一共五道题: 1. PERKET: 观察容易发现n的值很小,所以我们可以考虑使用dfs的方法进行解答,首先我们可以考虑一共有n种配料,那么我们就可以考虑到可以选择1到n种配料数目,然后基于这个思路我们再对其进行判断…

关于JVM的小总结(待补充)

JVM组成及他们之间的关系 装载类子系统字节码执行引擎运行时数据区 装载类子系统 类加载器字节码调节器类加载运行时数据区 字节码执行引擎 运行时数据区 线程私有 虚拟机栈本地方法栈程序计数器 线程共享 堆方法区(元空间)

C++的类和对象(四):拷贝构造函数

目录 拷贝构造函数 特性 自定义类型的传值传参和传引用传参对比 赋值运算符重载 拷贝构造函数 基本概念:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在创建一个已存在对象一模一样的新对象时…

IDEA 配置文件乱码,项目编码设置

见下图 其中第一二项控制全局以及工程的编码格式,下方的则是 properties 配置文件的格式,统一调整为 UTF-8 后不再乱码

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

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

如何在Linux系统Docker部署Dashy并远程访问内网服务界面

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Unity:Animation 三 Playable、ImportModel

目录​​​​​​​ 1. Playables API 1.1 Playable vs Animation 1.2 Advantages of using the Playables API 1.3 PlayableGraph Visualizer 2. Creating models outside of Unity 2.1 Preparing your model files for export 2.1.1 Scaling factors 2.1.2 优化模型文…

Unity中关于继承ScriptableObject的类

在游戏中我们会经常看到一些.asset的配置文件,而这些文件就是用一个自定义的类去继承ScriptableObject来生成的。比如当前有一些零散特效需要预加载,这个时候我们可以声明一个类去保存这些零散特效对象的信息,然后统一读取加载。 代码&#…

专访|云安全攻防:从理论到应用的全面探索

2023年11月,美国核研究实验室(INL)遭遇数据泄露。同年10月,索尼的员工数据在MOVEit攻击事件中被泄露。2024年2月,某知名制造商因云存储服务器的配置错误导致了敏感数据泄露。 这些事件表示企业必须重视云安全建设&…

【Memory协议栈】NVRAM Manager 模块介绍

目录​​​​​​​ 前言 正文 1.功能简介 2.关键概念 3.功能详解 3.1 内存硬件抽象层Ea/Fee的寻址方案 3.2 基本存储对象Basic storage objects 3.2.1 NV Block 3.2.2 RAM Block 3.2.3 ROM Block 3.2.4 Administrative block 3.2.5 NV Block Header 3.3块管理类型…

iostat命令详解

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 iostat是一个使用频率较高的命令,主要用来统计和输出CPU和磁盘IO信息。它的安装很简单: # yum -y insta…

20240307-1-前端开发校招面试问题整理JavaScript

前端开发校招面试问题整理【1】——JavaScript 1、JavaScript 基础 Q:介绍 js 的基本数据类型? 基本类型(值类型):String,Number,Boolean,Null,Undefined,S…

创邻科技获评环紫金港创新生态圈智源创新企业

3月1日,由杭州城西科创大走廊管理委员会指导,中共杭州市西湖区委员会、西湖区人民政府主办的“环紫金港创新生态圈”行动推进大会暨2024年紫金港科技城经济高质量发展大会在杭州举办。凭借重要的生态位置和创新业务成果,创邻科技受邀参会并被…

安卓手机如何使用JuiceSSH实现公网远程连接本地Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Java面试篇【MyCat】常见面试题(2024最新)

Mycat 1.Mycat 分库分表中间件,将存放在一个数据库的数据存放在不同的多个数据库中。来分散负载。 scheme 逻辑库,对应mysql的数据库,一个逻辑库定义了包含的所有table.是数据库集群对外的统一访问接口。table 逻辑表,和物理数…

08 |「Fragment 」

前言 实践是最好的学习方式,技术也如此。 文章目录 前言一、简介1、是什么2、为什么要有 Fragment3. Fragment 详细解释 二、Fragment 与 Activity 的直观理解三、Fragment 的创建1、Fragment 的创建方式2、Fragment 的增删替查1) 替换(常见&…

每日学习总结20240306

每日总结 20240306 1. 断言测试判断 #include <iostream> #include <assert.h> #include <cassert> #include <stdio.h>#define STR_OK "[\x1b[1;32m OK \x1b[0m]" #define STR_FAIL "[\x1b[1;31mFAIL\x1b[0m]"…

海外IP代理应用:亚马逊使用什么代理IP?

代理IP作为网络活动的有力工具&#xff0c;同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台&#xff0c;吸引了大量的跨境电商玩家入驻&#xff0c;想要做好亚马逊&#xff0c;养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢&#xff1f;如何使用&#xf…

TikTok小店如何批量生成/上传产品视频?

有许多Shopee卖家都会遇到这样的问题&#xff1a;明明产品标题、描述优化了&#xff0c;产品主图也认真做了&#xff0c;但是自己的Shopee店铺还是没转化! 可能是忽略了产品视频。 在Shopee官方的交流沙龙中&#xff0c;Shopee官方讲师提及&#xff1a;“有视频的产品比没有视…

插件WebApiClient.JIT报异常Cannot access a disposed object

调第三方接口使用的是插件WebApiClient.JIT 这个插件很好用&#xff0c;一直使用的都没问题&#xff0c;但是今天却出现了一个奇怪的问题&#xff0c;放在循环里调接口抛异常“Cannot access a disposed object” 调了login接口后IsDisposed true&#xff0c;再使用_erpOutAp…