当前位置: 首页 > news >正文

Java -- String类-StringBuffer类-StringBuilder类

String 类:

b.intern():方法返回常量值地址

1. String是一个final类,代表不可变的字符序列

2. 字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的

字符串的特性:


1. 编辑器不傻,做一个优化,判断创建的常量池对象,是否有引用指向

2. String a = "hello"+"abc"; =>> String a = "helloabc";

String 类常用的方法:

equals:区分大小写,判断内容是否相等

equalslgnoreCase:忽略大小写的判断内容是否相等

length:获取字符的个数,字符串的长度

indexOf:获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1

lastIndexOf:获取字符在字符串对象中最后一次出现的索引,索引从0开始,如果找不到,返回-1

substring:截取指定范围的子串

toUpperCase:转换成大写

toLowerCase:转换成小写

concat:拼接字符串

replace:替换字符串中的字符

split:分割字符串,对于某些分割字符,我们需要转义

toCharArray:转换成字符数组

compareTo:比较俩个字符串的大小,如果前者大,则返回正数,后者大,则返回负数,如果相等,返回0 ;  如果长度相同,并且每个字符也相同,就返回0  ;如果长度相同,或者不相同但是在进行比较时可以区分大小就返回c1-c2;

format:格式字符串


StringBuffer类:

代表可变的字符序列,可以对字符串内容进行增删。很多方法与String相同,但StringBuffer是可变长度的。

String VS StringBuffer

1. String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低

2. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高

StringBuffer的构造器:

StringBuffer():构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符

StringBuffer(CharSequence seq):

    public java.lang.StringBuilder(CharSequence seq)构造一个字符串缓冲区,它包含与指定的CharSequence相同的字符

增: s.append(',');

删:s.delete(11,14);

修改:s.replace(9,11,"刘家");

查找指定的子串在字符串第一次出现的案例,如果找不到返回-1

int indexOf = s.indexOf("lk");
System.out.println(indexOf);

插入:s.insert(9,"刘家亮");

长度:System.out.println(s.length());


StringBuilder类:

基本介绍:

1. 一个可变的字符序列,此类提供一个与StringBuffer兼容的API,但不保证同步(StringBulider不是线程安全),该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。建议优先采用该类,它比StringBuffer要快

2. 在StringBuilder上主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据

常用方法:

StringBuffer和StringBuilder均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样


String ,StringBuffer和StringBuilder的比较:

1. StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样

2. String:不可变字符序列,效率低,但是复用率高。

3. StringBuffer:可变字符序列,效率较高(增删),线程安全。源码中可以看到synchronized已同步

4. StringBuilder:可变字符序列,效率最高,线程不安全

5. String使用注意事项说明:
string s = “a”;//创建了一个字符串

    s+=“b”;//实际上原来的“a”字符串对象已经丢弃了,现在又产生了一个字符串s+“b”。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象残留在内存中,降低效率。结论:如果我们对String做大量修改,不要使用String。

结论:

1. 如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder

2. 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder

3. 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer

4. 如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息

http://www.dtcms.com/a/303782.html

相关文章:

  • uniapp开发微信小程序(新旧版本对比:授权手机号登录、授权头像和昵称)
  • K-近邻算法(KNN算法)的K值的选取--交叉验证+网格搜索
  • 搭建专属AI聊天网站:NextChat + 蓝耘MaaS平台完整部署指南
  • 2025年7月技术问答第4期
  • 树形结构递归查询与嵌套结构转换:Flask + PostgreSQL 完整实现
  • 力扣面试150题--位1的个数
  • 【第四章自定义编辑器窗口_扩展默认的编辑器窗口_扩展Hierarchy窗口(7/11)】
  • QT项目 -仿QQ音乐的音乐播放器(第三节)
  • 深入理解 Qt 元对象系统 (Meta-Object System)
  • WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析六
  • [明道云]-基础教学2-工作表字段 vs 控件:选哪种?
  • HTTP 与 HTTPS 的区别
  • mapbox进阶,mapbox-gl-draw绘图插件扩展,编辑模式支持点、线、面的捕捉
  • Objective-c 初阶——异常处理(try-catch)
  • 盛最多水的容器-双指针
  • 注册发送手机短信
  • bash变量名不能有连字符
  • Spark初探:揭秘速度优势与生态融合实践
  • RabbitMQ面试精讲 Day 7:消息持久化与过期策略
  • H.264视频的RTP有效载荷格式(翻译自:RFC6184 第5节 RTP有效载荷格式)
  • 网络协议——MPLS(多协议标签转发)
  • 力扣30 天 Pandas 挑战(3)---数据操作
  • LeetCode 283 - 移动零
  • CTF-Web学习笔记:服务端请求伪造(SSRF)篇
  • 单片机学习笔记.PWM
  • 第4章唯一ID生成器——4.5 美团点评开源方案Leaf
  • 医疗AI新基建:MCP与A2A协议的破局与前瞻
  • JVM 崩溃(Fatal Error)解决方法
  • 影刀RPA_初级课程_玩转影刀自动化_EXCEL操作自动化
  • 《C++初阶之STL》【list容器:详解 + 实现】