1. String概述
java.lang.String类代表字符串,java程序中所有字符串文字都为该类对象。
String name = "liang";
String类特点:字符串的内容是不会改变的,它的对象在创建后不能进行修改。
//下列代码总共产生三个字符串
String name = "zhangsan";
String age = "18";
System.out.println(name + age);//字符串拼接会产生一个新的字符串
//下列代码总共产生两个字符串
String name = "zhangsan";
name = "lisi";//创建一个新的字符串,然后再赋值给变量
2. 创建String对象的两种方式
创建String对象两种方式:直接赋值和new
2.1 直接赋值
String name = "liang";
当使用双引号直接赋值时,系统会检查该字符串在字符串常量池中是否存在:
- 不存在:在常量池中创建一个常量"liang"
- 存在:复用
2.2 new
| 方法名 | 说明 |
|---|---|
| public String() | 创建一个空白字符串对象,不含有任何内容 |
| public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
| public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
| public String(String original) | 根据传入的字符串,来创建字符串对象 |
使用new创建对象时:
String name = new String("liang");
- 代码加载编译时,会在常量池中创建常量。
- 在调用new时,会在堆中创建String对象,并引用常量池中的字符串对象,并返回String对象引用。
使用new创建明显多创建了一个对象,多此一举,会占用更多的内存,所以一般建议使用直接量的方式创建字符串。
3. 字符串的比较
3.1 == 比较原理
3.1.1 == 比较基本数据类型
基本数据类型比较的是数据值。
int a = 1;
int b = 1;
System.out.println(a == b);//true
3.1.2 == 比较引用数据类型
引用数据类型比较的是地址值。
String name1 = new String("zhangsan");
String name2 = new String("zhangsan");
System.out.println(name1 == name2);//false
3.1.3 == 比较字符串的几种情况:
String name1 = "zhangsan";
String name2 = "zhangsan";
System.out.println(name1 == name2);//true,串池中同一个字符串常量
String name1 = "zhangsan";
String name2 = "lisi";
System.out.println(name1 == name2);//false
String name1 = new String("zhangsan");//记录的是堆中地址
String name2 = "zhangsan";//记录的是串池中地址
System.out.println(name1 == name2);//false
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str1 = sc.next();//abc 方法底层是new出来的
String str2 = "abc";
System.out.println(str1 == str2);//false
3.2 对字符串内容进行比较
public boolean equals(String s) :比较两个字符串内容是否相同、区分大小写。
public boolean equalsIgnoreCase(String anotherString):忽略大小写(英文)的比较。
4. StringBuilder
4.1 概述
概述: StringBuilder 可以看成是一个容器,创建之后里面的内容是可变的。
作用: 提高字符串的操作效率。在拼接字符串和反转字符串的时候会使用到。
注:打印StringBuilder对象时。打印的是属性值而不是地址值,因为StringBuilder对其做了处理。
4.2 常用方法
构造方法:
| 方法名 | 说明 |
|---|---|
| public StringBuilder() | 创建一个空白字符串对象,不含有任何内容 |
| public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
成员方法:
| 方法名 | 说明 |
|---|---|
| public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
| public StringBuilder reverse() | 反转容器中的内容 |
| public int length() | 返回长度(字符出现的个数) |
| public String toString() | 通过toString()就可以实现把StringBuilder转换为String |
StringBuilder的使用:
//1.创建对象
StringBuilder sb = new StringBuilder();
//2.添加字符串,链式编程
sb.append("a").append("b").append("c").append("dd");
System.out.println(sb);//abcdd
//3.再把StringBuilder变回字符串
String str = sb.toString();
System.out.println(str);//abcdd
StringBuilder拼接字符串:
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i == arr.length - 1){
sb.append(arr[i]);
}else{
sb.append(arr[i]).append(", ");
}
}
sb.append("]");
String str = sb.toString();
System.out.println(str);
5. StringJoiner
5.1 概述
概述: StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。JDK8出现的。
作用: 提高字符串的操作效率,而且代码编写特别简洁。
5.2 常用方法
构造方法:
| 方法名 | 说明 |
|---|---|
| public StringJoiner(间隔符号) | 创建一个StringJoiner对象,指定拼接的间隔符号 |
| public StringJoiner(间隔符号, 开始符号, 结束符号) | 创建一个StringJoiner对象,指定拼接的间隔符号、开始符号、结束符号 |
成员方法:
| 方法名 | 说明 |
|---|---|
| public StringJoiner add(添加的内容) | 添加数据,并返回对象本身 |
| public int length() | 返回长度(字符出现的个数) |
| public String toString() | 返回一个字符串 |
StringJoiner的使用:
//1.创建一个对象,指定间隔符号
StringJoiner sj = new StringJoiner("-");
//2.添加元素
sj.add("a").add("b").add("c");
//3.打印结果
System.out.println(sj);//a-b-c
StringJoiner拼接字符串:
//1.创建对象
StringJoiner sj = new StringJoiner(", ","[","]");
//2.添加元素
sj.add("a").add("b").add("c");
int len = sj.length();
System.out.println(len);//9
//3.打印
System.out.println(sj);//[a, b, c]
String str = sj.toString();
System.out.println(str);//[a, b, c]