目录
1、基本介绍:
- ·String s5=new String(byte[] b);
String类具有以下特性:
不可变性(Immutable): String对象一旦创建,其内容就不能被修改。任何对String对象的操作都会创建一个新的String对象,原始对象保持不变。这样的设计使得String在多线程环境下更加安全,因为它们不可变,不会被其他线程修改。
字符串池(String Pool): Java中的字符串池是一种特殊的内存区域,用于存储字符串常量。当创建一个新的字符串常量时,JVM会首先检查字符串池,如果池中已存在相同内容的字符串,则返回池中的引用,否则会在池中创建一个新的字符串并返回引用。这可以节省内存空间,提高性能。
性能优化: 由于String的不可变性,一些常用的字符串操作(如拼接、截取、替换等)会通过创建新的String对象来实现,这可能会导致内存和性能方面的开销。为了优化性能,Java提供了StringBuilder和StringBuffer等可变的字符串类,用于频繁修改字符串内容。
重载了"+"操作符: String类重载了"+"操作符,使得字符串可以通过"+"连接起来,形成新的字符串。
支持正则表达式: String类提供了丰富的正则表达式支持,可以进行模式匹配、查找和替换等操作。
Unicode支持: String类支持Unicode字符集,可以表示世界上几乎所有的字符。
equals()方法重写: String类重写了equals()方法,用于比较两个字符串的内容是否相等。
hashCode()方法重写: String类重写了hashCode()方法,用于计算字符串的哈希码,可以用于哈希表等数据结构中。
2、String类的常见方法:


- package String_;
- public class String01 {
- public static void main(String[] args) {
- String str1="hello";
- String str2="Hello";
-
- System.out.println(str1.equals(str2));//f, equals方法比较内容是否相同,区分大小写
- System.out.println(str1.equalsIgnoreCase(str2));//t, equalsIgnoreCase方法比较内容是否相同,不区分大小写
-
- System.out.println(str1.indexOf('e'));//输出:1,该字符第一次出现的地址
- System.out.println(str1.lastIndexOf('e'));//输出:1,该字符最后一次出现的地址
-
- System.out.println(str1.indexOf("el"));//输出:1,也可以是查找字符串第一个字母的地址
- System.out.println(str1.lastIndexOf("el"));//输出:1,查找字符串第一个字母最后一次出现的地址
-
- System.out.println(str1.substring(2));//输出:llo,截取索引2后面所有的字符
- System.out.println(str1.substring(0,2));//输出:he,截取索引为0到索引为2的所有字符
- }
- }
-

- package String_;
- public class String01 {
- public static void main(String[] args) {
- String s="hello";
-
- System.out.println(s.toUpperCase());//HELLO
- System.out.println(s.toLowerCase());//hello
-
- s=s.concat(" cheer ").concat(" up ").concat("TV");
- System.out.println(s);//hello cheer up TV
- System.out.println(s.replace("cheer","CHEER"));//hello CHEER up TV
- //注意:s.replace()方法执行后对原来的s没有任何影响
-
- String poem="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
- String[] split=poem.split(",");//以逗号为标准对poem进行分割,返回一个数组
- for(int i=0;i
- System.out.println(split[i]);
- }
- //输出:
- //锄禾日当午
- //汗滴禾下土
- //谁知盘中餐
- //粒粒皆辛苦
- //注意:在对字符串进行分割时,如果有特殊字符,需要加入转义字符\
- //如要以"\\"为标准分割,那应该是String[] split=poem.split("\\\\");
- //因为一个\对应一个\,两个\\加起来就一共是\\\\个了
-
- char[] ch=s.toCharArray();//把字符串转换成字符数组
- for(int i=0;i
- System.out.println(ch[i]);
- }
-
- String s1="hello";
- String s2="hi";
- System.out.println(s1.compareTo(s2));//输出:-4 //因为e-i=-4
- //前>后,返回正数;后>前,返回负数,前=后,返回0
-
- String s3="hello";
- String s4="h";
- System.out.println(s3.compareTo(s4));//输出:4 //因为s3.length-s4.length=4
- //如果前面部分都相同,如hello和he比较,则是则返回的是字符串长度的差
- }
- }
-
- package String_;
- public class String01 {
- public static void main(String[] args) {
- String name="tom";
- int age=10;
- double score=98.8;
- char gender='男';
- String s="姓名:%s,年龄:%d,成绩:%.2f,性别:%c";//占位符,由后面的变量来替换
- System.out.println(String.format(s,name,age,score,gender));
- //输出:姓名:tom,年龄:10,成绩:98.80,性别:男
- }
- }
-
二、StringBuffer类
1、基础知识
- 1)java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
- 2)很多方法与String相同,但StringBuffer是可变长度的
- 3)StringBuffer是一个容器
- 4)StringBuffer的直接父类是AbstractStringBuilder
- 5)StringBuffer实现了Serializable, 说明StringBuffer可以串行化,即可以网络传输
- 6)父类AbstractStringBuilder有属性char[] value,不是final,该value数组存放字符串内容,引出的是存放在堆中的(不再是常量池)
- 7)StringBuffer是一个final类,不能被继承
2、构造方法

- StringBuffer stringBuffer=new StringBuffer();
- StringBuffer stringBuffer1=new StringBuffer(100);
- StringBuffer stringBuffer2=new StringBuffer("hello");
3、常见方法

- package String_;
- public class String01 {
- public static void main(String[] args) {
- StringBuffer s=new StringBuffer("hello");
- s.append(" h");
- s.append("i").append(" 100").append(true).append(10.5);//追加
- System.out.println(s);//hello hi 100true10.5
-
- s.delete(2,3);//删除
- System.out.println(s);//helo hi 100true10.5
-
- s.replace(0,5,"cheer");//替换
- System.out.println(s);//cheerhi 100true10.5
-
- s.indexOf("c");//查找
- System.out.println(s);//输出:0
-
- s.insert(5," up! ");//增加
- System.out.println(s);//输出:cheer up! hi 100true10.5
- }
- }
-
4、String 和StringBuffer的区别


三、StringBuilder类
- 1)是一个可变的字符序列,此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全),该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用时,如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快
- 2)在StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据

- 3)StringBuilder和StringBuffer均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样
- 4)StringBuilder是final
- 5)继承了AbstractStringBuilder,属性char[] value,内容存到value,因此字符序列是在堆中
- 6)实现了Serializable接口,StringBuilder对象可以串行化,即可以网络传输,可以保存到文件。序列化(所谓序列化即可以保存类型和数据本身)
- 7)StringBuilder的方法,没有做互斥处理,即没有synchronized关键字,因此在单线程的情况下使用


-
相关阅读:
指纹浏览器开发指南-EasyBR
以太网帧间隙IFG详解(Interframe Gap帧间距)
基于单片机的线路差动保护系统设计
Python学习:自动生成Mysql建表语句
Jetson Nano上jtop(jetson_stats.service)不能运行
linux wc命令
MySQL的索引B+树及MySQL日志:binlog、redolog、undolog讲解
企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
Vue组件自定义事件
Codeforces Round #821 (Div. 2) A~C(模拟、构造)
-
原文地址:https://blog.csdn.net/weixin_72052233/article/details/127943426