String
概念:String的底层是一个封装的char[]数组
特点
因为String的底层是char[]数组,所以String的长度不可变
创建实例
String通常有两种创建实例的方式
String str="aaaa";
//这种创建方式是在常量池中放置一个常量,创建实例时会先从常量池中获取,若没有则去创建对象
public static void main(String[] args) {
String str="aaaa";
String str1="aaaa";
System.out.println(str==str1);
}
//结果为 true 因为String的这种创建实例的方式,是先从常量池中获取,如果常量池中没有,再去创建一个实例
//所以上方代码中,str1和str代指的是同一个实例
String str=new String("aaaa");
//这种创建方式,每次都是重新创建一个实例
public static void main(String[] args) {
String str=new String("aaaa");
String str1=new String("aaaa");
System.out.println(str==str1);
}//结果为 false 因为这两次创建了两个实例,地址值不同
常用方法
length() //获取字符串长度
substring(int strIndex,int endIndex) //截取字符串,前闭后开
indexof() //获取指定字符或字符串的第一次出现的索引位置,从0开始
charat() //获取指定索引位置的字符
lastIndexof() //获取指定字符或字符串最后一次出现的索引位置
split() //将字符串,按照指定字符串分割开 注意 split(String reg) 和split(String reg,-1)的区别
//https://www.cnblogs.com/planted/p/15182610.html 有介绍其区别
startwith() //判断该字符串是否由指定字符开头
endswith() //判断该字符串是否由指定字符结尾
trim() //去除字符串两端的空格
String的连接效率
注意:数值类型使用 "+" 与字符串连接时,结果为字符串类型
多个字符串之间是通过 "+" 进行连接的,但是由于String的底层是char[],长度不可变,所以每次连接,都相当于重建了一个char数组,效率非常低
由于字符串的连接效率较低,所以出现了下方两个类:
StringBuffer和StringBuilder
创建实例:这两个类只能通过new 的方式创建实例
特点:
- 这两个类的底层都是封装的char[]数组
- 这两个类是可变的字符序列
- 默认初始的长度是16,长度不够的话,第一次扩容是(2倍+2),若仍然不够则直接扩容到目标长度
- 这两个类是通过append()方法进行字符串连接
- StringBuffer线程安全,StringBuilder线程不安全