- 1.1 String分析
String类的分析
1、String类的底层使用char的数组保存数据
2、String类是一个final类,不允许被集成
3、String类是一个不可变类,该类的对象生成后,内存不会发生变化
4、Sring类中的所有返回String类型对象的成员方法都是返回一个新的String类
- 1.2 String 比较
1)String类重写了equals方法,用来比较两个字符串的内容是否相同
2)String类的equals方法和==做区分,==比较的是两个字符串对象的地址
String类重写了equals方法,从底层代码分析:
- 1.3 字符串类实例化机制
java中String类型的创建有以下两种方式:
1、创建的时候,JVM会先在字符串常量池中去查找是否存在该字符串,如果存在直接返回该字符串对象的地址,否则会在常量池中创建该字符串对象并返回地址
//第一种方式
String s1="hello world";
2、创建的时候,也会先查找常量池中是否存在该字符串,如果存在就会在堆里面复制一份这个字符串对象,然后把堆里面的独享地址返回个常量,不存在的话就在堆里和和常量各创建一个对象,并返回堆中对象的地址
//第二种方式
String s2=new String("hello world");
//只在常量池中创建了一个对象,
String s1="123";
//在常量池和堆中各创建了一个对象,创建了2个对象
String s2=new String("456");
- 1.4 字符串的维护和参数传递
1、String类的+和concat都可以将2个字符串拼接到一块,形成新的字符串
2、String的+还可以将字符串和非字符串拼接在一起,成为新的字符串,concat不可以与费字符串拼接在一起
- 1.5 字符串的常用API方法
String类的常用用法
1、equals方法 用来比较连个字符串内容是否相同
2、charAt方法 返回指定索引处的字符
3、contains方法 判断字符串中是否包含另一个字符串
4、indexOf方法 返回第一次出现某个字符串的位置
5、inEmpty方法 判断字符串是否是空字符串
6、split方法 将字符串分割,返回一个字符串数组
7、trim方法 返回去掉字符串开头和结尾的空格后的字符串
8、toCharArray方法 将字符串转换成字符数组
9、replace方法 替换原字符串中的某个字符或字字符串,全部替换
10、length方法 返回字符串的长度
package level2;
import java.u;
/**
*@author wly
*@version 创建时间:2022-3-1416:44:48
*/
public class Test32 {
public static void main(String[] args) {
String s1=" qunianmailegebiao ";
//charAt方法 返回指定索引处的字符,索引从0开始
Sy(0));
//contains方法 判断字符串中是否包含另一个字符串
Sy("mailege"));
//indexOf方法 返回第一次出现某个字符串的位置,索引为0
Sy("nian"));
//inEmpty方法 判断字符串是否是空字符串
Sy());
//split方法 将字符串分割,返回一个字符串数组
String[] s2=("a");
Sy(s2));
//trim方法 返回去掉字符串开头和结尾的空格后的字符串
Sy(s1);
Sy());
//toCharArray方法 将字符串转换成字符数组
char[] chars=();
Sy(chars));
//replace方法 替换原字符串中的某个字符或字字符串,全部替换
Sy("a", "###"));
//length方法 返回字符串的长度
Sy());
}
}
- 1.6 StringBuffer类
StringBuffer又称为可变字符序列,它是一个类似于String的字符串缓冲区,可以改变该序列的长度和内容
StringBuffer是同步安全的
String、StringBuffer、StringBuilder的区别
1、String是内容不可变的
2、StringBuffer、StringBuilder都是内容可变的
3、StringBuffer是同步的,数据安全、效率低
4、StringBuilder是不同步的,数据不安全、效率高
- 1.7 StringBulider类
StringBuilder类也是字符串缓冲区,非同步安全
package level2;
/**
*@author wly
*@version 创建时间:2022-3-1417:28:01
*/
public class Test35 {
StringBuffer sb=new StringBuffer();
StringBuilder sb1=new StringBuilder();
public Test35() {
//创建线程组来管理线程
ThreadGroup group=new ThreadGroup("testgroup");
//创建线程类对象
MyThread at=new MyThread();
//开启1000个线程
for (int i = 0; i < 1000; i++) {
Thread thread=new Thread(group,at,S(i));
();
}
while ()>0) {
try {
T(10);
} catch (Exception e) {
// TODO: handle exception
}
}
Sy());
Sy());
}
class MyThread implements Runnable{
@Override
public void run() {
try {
T(10);
} catch (Exception e) {
// TODO: handle exception
}
("1");
("1");
}
}
public static void main(String[] args) {
new Test35();
}
}