一、字符串概述
1.String是Java定义好的一个类,定义在java.lang包中,使用时可以直接调用
2.Java程序中的所有字符串文字(例如"abcdefg")都被视为此类的对象。
3.字符串不可变,它们的值在创建后不能更改任何看似修改字符串的操作(如拼接、替换等)实际上都会生成一个新的字符串对象,而原始字符串保持不变。
不可变性示例:
String s1 = "Hello";
s1 = s1 + " World";
System.out.println(s1);
虽然看起来s1被修改,但实际上创建了一个新字符串对象,原始"Hello"未被改变。
- 原始的"Hello"对象始终存在于常量池中,并没有被修改
- 新增的" World"对象也会保存在常量池中
- 拼接产生的"Hello World"是一个全新的对象,位于堆中
二、创建String对象的两种方式
1.直接赋值
String name = “csdn”;
2.new 构造函数方式
| 构造方法 | 说明 |
|---|---|
| public String() | 创建空白字符串,不含任何内容 |
| public String(String original) | 根据传入的字符串,创建字符串对象 |
| public String(char[] chs) | 根据字符数组,创建字符串对象 |
| public String(byte[] chs) | 根据字节数组,创建字符串对象 |
public class StringDemo1 {
public static void main(String[] args) {
//1.使用直接赋值获取一个字符串对象
String s1 = "zzz";
System.out.println(s1);
//2.使用new的方式获取一个字符串对象
//空参构造:可以获取一个空白的字符串对象
String s2 = new String();
System.out.println("@" + s2 + "!");
//传递一个字符串,根据传递的字符串内容再创建一个新的字符串对象
String s3 = new String("zxp");
System.out.println(s3);
//传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
char[] chs = {'a','b','c','d'};
String s4 = new String(chs);
System.out.println(s4);
//传递一个字节数组,根据字节数组内容再创建一个新的字符串对象
//进入ASCII码中查找该字值代表的字符
byte[] bytes = {97,98,99,100};
String s5 = new String(bytes);
System.out.println(s5);
}
}

三、字符串的比较
关于==比较的内容
1.基本数据类型比较的是数据值
int a = 10;
int b = 10;
System.out.println(a == b);//true
2.引用数据类型比较的是地址值
String s1 = "abc";
String s2 = "abc";
System.out.println(a == b);//true
这时结果会是 true,因为 Java 会把字符串字面量放入字符串常量池,相同内容的字面量会指向常量池中的同一个对象。
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(a == b);//false
这时结果为false,s1和s2分别是使用 new String() 创建的是不同对象,地址不同,因此 == 比较结果为 false。
3.当希望比较字符串值的时候,可以选择以下方法
| 方法 | 作用 |
|---|---|
| boolean equals方法(要比较的字符串) | 完全一样结果才是true,否则为false |
| boolean equalsIgnoreCase方法(要比较的字符串) | 在上述的基础上忽略大小写的比较 |
public class StringDemo2 {
public static void main(String[] args) {
//1.创建两个字符串对象
String s1 = new String("abc");
String s2 = "Abc";
//2.==号比较
//基本数据类型:比的是数据值
//引用数据类型:比的是地址值
System.out.println(s1 == s2);
//3.比较字符串对象中的内容是否相等
boolean result = s1.equals(s2);
System.out.println(result);//false
//4.比较字符串对象中的内容是否相等,忽略大小写
boolean result1 = s1.equalsIgnoreCase(s2);
System.out.println(result1);//true
}
}
四、StringBuilder
1.定义:StringBuilder 是 Java 中用于高效处理字符串的可变字符序列类。与 String 类不同,StringBuilder 允许直接修改内容而无需创建新对象,适合频繁拼接、插入或删除字符串的场景。
2.StringBuilder的构造方法
| 方法名 | 说明 |
|---|---|
| public StringBuilder() | 创建一个空白可变字符串对象,不含任何内容 |
| public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
StringBuilder sb = new StringBuilder("abc");
System.out.println(sb);//abc
3.StringBuilder常用方法
| 方法名 | 说明 |
|---|---|
| public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
| public StringBuilder reverser() | 反转容器中的内容 |
| public int length() | 返回长度(字符出现的个数) |
| public String toString() | 通过toString()就可以实现把StringBuilder转换为String |
public class StringBuilderTest1 {
public static void main(String[] args) {
//1.创建对象
StringBuilder sb = new StringBuilder();
//2.添加字符串
sb.append("aaa").append("bbb").append("ccc");
//3.再把StringBuilder变回字符串
String str = sb.toString();
System.out.println(str);//aaabbbccc
}
}
五、StringJoiner
1.定义:StringJoiner 是 Java 8 引入的一个工具类,用于高效拼接字符串,支持自定义分隔符、前缀和后缀。它简化了字符串拼接的代码,特别适合处理集合或数组元素的拼接需求。
2.StringJoiner的构造方法
| 方法名 | 说明 |
|---|---|
| public StringJoiner(间隔符号) | 创建一个StringJoiner对象,指定拼接时的间隔符号 |
| public StringJoiner(间隔符号,开始符号,结束符号) | 创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号 |
3.StringJoiner的成员方法
| 方法名 | 说明 |
|---|---|
| public StringJoiner add(添加的内容) | 添加数据,并返回对象本身 |
| public int length() | 返回长度(字符出现的个数) |
| public String toString() | 返回一个字符串(该字符串就是拼接之后的结果) |
import java.util.StringJoiner;
public class StringJoinerDemo {
public static void main(String[] args) {
//创建对象
StringJoiner sj = new StringJoiner(",","[","]");
//添加元素
sj.add("aaa").add("bbb").add("ccc");
//长度
System.out.println(sj.length());
System.out.println(sj);
}
}

Java字符串学习:创建、比较与处理
1404

被折叠的 条评论
为什么被折叠?



