目录
一.String
1.String是java.lang包下的一个类,不是基本数据类型
java.lang包下的不需要导包,可以直接使用:
JVM会自动加载java.lang下的类
2.String是一个final类:
String不能被继承,其方法不能被重写
String的常用方法:
先学构造:
new String("XXX");
new String(byte[],charset);
new String(byte[]);
String msg = "abc";
3. ==和equals的区别?
equals():比较的字符串的内容是否相同
引用变量1==引用变量2:
比较的两个引用指向对象的物理地址是否相同:
判断两个引用是否指向同一个对象
4. String常量池式:
1.首先去常量池查找有无该字符串,如果有,
直接把常量池中的字符串给当前引用
2.如果没有,则创建新字符串对象
5. String 常用的方法
String A = "饶"
String B = "饶"
A.equals(B):
//比较A和B的内容是否相同
A.equalsIgnoreCase(B):
//忽略大小写的内容比较
A.toUpperCase():String
//把字符串的内容全部转化为大写
A.toLowerCase():String
//把字符串的内容全部转化为小写
//字符串拼接:
A+B:
//A和B都可以是null
A.concat(B):
//注意:A和B都不能是null
A.length()
//获取字符串的长度
//A.indexOf(要判断的字符/字符串):
//下标
//如果没有找到返回值为-1
二.StringBuilder
1. StringBuilder是一个可变的字符序列
因为在类中提供了修改私有成员变量的方法
常用的方法是append 和 insert,就是在StringBuilder对象本身上,进行修改操作。
2. 构造方法
1、构造方法作用:创建当前对象、将其他类型的数据,转换成当前类型
2、StringBuilder的构造方法:
StringBuilder():创建一个生成器,初始容量为16个字符
StringBuilder(int capacity):创建一个生成器,初始容量为capacity大小
StringBuilder(String str):创建一个生成器,初始值就是str这些字符,初始大小是str.length+16
3、获取容积的方法:
capacity()容量
length():字符串的长度
3. 常用方法
添加功能:
//添加功能
//1、append(任意类型):可以将任意数据类型,转成字符串,添加到生成器中
//2、insert(int index, 任意数据类型):可以将任意数据类型,添加到指定的位置
public class Demo2_添加功能 {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder();
// sb.insert(1, "a");//没有1的索引。会报异常
sb.insert(0, "a");
sb.insert(0, "b");
sb.append("abcd").append("abcd")
.append("abcd").append("abcd");
System.out.println(sb);
//扩容规则是初始化容量*n+2
System.out.println(sb.capacity());
test1();
test2();
}
public static void test1() {
StringBuilder sb=new StringBuilder("abc");
sb.insert(1,"xyz");
sb.append("abcd").append("abcd").append("abcd").append("abcd");
System.out.println(sb);
//扩容规则是初始化容量*n+2
System.out.println(sb.capacity());
}
public static void test2() {
StringBuilder sb=new StringBuilder(8);
sb.append("xyzw").append("xyzw").append("xyzw");
System.out.println(sb);
//扩容规则是初始化容量*n+2
System.out.println(sb.capacity());
}
}
删除功能
// 1、deleteCharAt(int index) :删除指定索引的字符
// 2、delete(int start, int end):删除指定范围的字符,被删除的部分包含头不包含尾
public class Demo3_删除功能 {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder("abcdefg");
sb.deleteCharAt(1);//删除指定索引的字符串,删除之后重新索引
System.out.println(sb);//acdefg
sb.delete(0, 2);
System.out.println(sb);
}
}
替换和反转功能
// 1、replace(int start, int end ,String str):
// 将字符串缓冲区中的从start开始到end-1这部分内容,替换成str
// 2、reverse():将原有字符序列进行反转
public class Demo3_删除功能 {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder("abcdefg");
//含头不含尾
System.out.println(sb.replace(1, 2, "你好世界"));
//反转
System.out.println(sb.reverse());
}
}
三.String 和 StringBuilder拼接字符串的区别
1、使用String类型拼接字符串:时间和空间上都非常浪费,浪费的程度和数组规模相关。
2、使用StringBuilder拼接字符串:时间和空间上都非常节省,无论循环多少次,都只创建两个对象。
String和StringBuilder的相互转换:
1、String转成StringBuilder
1、StringBuilder的构造方法
2、append方法 (常用)
2、StringBuilder转成String类型
1、toString的方法(常用)
2、使用String的构造方法
//String--->StringBuilder
String str="abc";
StringBuilder sb=new StringBuilder(str);
sb.append(str);
//StringBuilder---->string
StringBuilder sb2=new StringBuilder("abc");
String s1=sb2.toString();
String s2=new String(sb2);
四.StringBuffer和StringBuilder的区别
1、共同点:
都是字符串的缓冲区,都是字符串的生成器,都是可变的字符序列,用法几乎一样
2、不同点:
1、出现版本不同:
StringBuffer在jdk1.0出现的
StringBuilder在jdk1.5出现的
2、线程安全性不同:
StringBuffer:线程安全的,同步的操作,多线程下面比较安全
StringBuilder:线程不安全的,异步操作,单线程操作
3、效率不同:
StringBuilder效率高于StringBuffer
3、使用场景
StringBuilder:在单线程操作的时候,速度最快,因为他是线程不安全的
StringBuffer:在多线程的时候使用,因为他是线程安全的
String:少量字符串操作的时候