String和StringBuilder
StringBuffer和StringBuilder的区别
1. 共同点
(1) 都是字符串的缓冲区,都是字符串的生成器,都是可变的字符序列
2. 不同点
(1) 出现的版本不同
① StringBuffer在jdk1.0出现的
② StringBuilder在jdk1.5出现的
(2) 线程安全不同
① StringBuffer是线程安全的,在多线程的环境下仍然保证数据安全
② StringBuilder是线程不安全的,在多线程环境下无法保证数据安全。
(3) 效率
① StringBuffer效率比较低
② StringBuilder效率比较高
后加:
StringBuffer和StringBuilder的区别
共同点
都是字符串的缓冲区,都是字符串的生成器,都是可变的字符序列
不同点
出现的版本不同
StringBuffer在jdk1.0出现的
StringBuilder在jdk1.5出现的
线程安全不同
StringBuffer是线程安全的,在多线程的环境下仍然保证数据安全
StringBuilder是线程不安全的,在多线程环境下无法保证数据安全。
效率
StringBuffer效率比较低
StringBuilder效率比较高
String
概述
String就是字符串类型,属于java.lang包,使用时不需要导包。
所有的字符串常量(“HelloWorld”、”abc”)都是属于String类型的对象
字符串字面值属于常量,存储在方法区的常量池中。
String类型是一个常量,在创建之后就无法更改(是一个不可变的字符序列)
不可变的原因是String类型只提供了构造方法,没有提供set方法,因此只能在创建对象的时候,初始化成员变量,将来对象创建完成之后,无法通过方法来修改。
String类型的判断功能
-
equals(Object obj):判断调用者和参数对象描述的字符串内容是否相同
-
equalsIgnoreCase(String str):忽略大小写判断两个字符串的内容是否相同。
-
Contains(String str):判断调用者是否包含了str这个字符串
-
startsWith(String prefix):判断调用者是否以prefix开头
-
endsWith(String suffix):判断调用者是否以suffix结尾
-
isEmpty():判断调用者是否是空串
String类型的获取功能
-
length():获取字符串字符的个数
-
charAt(int index):返回调用者字符串中索引为index的字符(和length方法结合之后可以遍历字符串)
-
subString(int beginIndex):获取一个字符串,内容是从当前字符串的beginIndex索引开始
-
subString(int beginIndex,int endIndex):获取一个指定范围索引的字符串
注意事项:
包含头不包含尾,返回的结果中,不包含endIndex索引上的字符 所有方法都无法修改字符串的对象本身,一般都是返回一个新的字符串对象。
-
IndexOf(char ch):返回ch字符在当前调用字符串中,第一次出现的位置。
-
lastIndex(char ch):返回ch字符在当前调用字符串中,最后一次出现的位置
String的转换功能
-
byte[] getBytes():将当前字符串,转换成字节数组
-
Char[] toCharArray():将当前的字符串,转换成字符数组
-
toUpperCase():将当前的字符串,转成全大写形式
-
toLowerCase():将当前的字符串转换成小写形式
-
Concat(String str):将当前调用者和参数str进行拼接,返回拼接后的字符串(不常用,因为更多的是使用运算符加号)
-
valueOf(Object obj):可以将任意数据类型的数据,转换成字符串
注意:参数不能为null 否则会报一个空指针异常
String类型的替换功能
-
replace(String oldstr,String newStr):将调用者中的老串替换成新串
-
trim():去掉字符串左右两边的空格,中间的空格还是存在
StringBuilder
概述
-
StringBuilder是一个可变的字符序列,因为在类中提供了修改私有成员变量的方法。
常用的方法是append和insert,就是在StringBuilder对象本身上,进行修改。
-
StringBuilder底层和String一样,也是维护了一个字符数组。
数组是私有的,外界无法直接访问,因此在StringBuilder或者String中对数组进行操作的共有方法进行封装。
-
String和StringBuilder的关系:都是用于描述字符串
(1) String是不可变的字符序列
(2) StringBuilder是可变变的字符序列因为提供了修改成员变量的方法
(3) String本身长度也不可以变化,StringBuilder长度可以变化。可以认为StringBuilder就像一个可以伸缩的容器,用于存储咱们的字符。
构造方法
-
构造方法:创建当前对象、将其他类型的数据,转换成当前类型
-
StringBuilder的构造方法
(1) StringBuilder():创建一个生成器,初始化容量为16个字符
(2) StringBuilder(int capacity):创建一个生成器,初始化容量为capacity大小
(3) StringBuilder(String str):创建一个生成器,初始化值为str这些字符,初始化容量str + 16
-
获取容积的大小
(1) capacity():获取当前生成器的容器大小 -
获取该容器的字符个数
(1) length():获取当前容器的字符个数
StringBuilder添加功能
append(任意类型):可以将任意数据类型,转成字符,添加到生成器中。
- insert(int index,任意数据类型):可以将任意数据类型,添加到指定的位置。
(1) 说明
① index的范围0~当前缓冲区的字符串大小
② 插入数据之后,数据本身的索引就是参数中指定的index
删除功能
-
deleteCharAt(int index):删除指定索引的字符
-
delete(int start,int end):删除制定范围的字符,被删除的部分包含头不包含尾
替换和反转
-
replace(int start,int end,String str):将字符串缓冲区中从start开始到end-1这部分内容,替换成str
-
reverse():将原有的字符序列进行反转。
String和StringBuilder拼接字符串的区别
-
使用String类型拼接字符串:时间和空间上都非常浪费,浪费的程度和数组的规模有关。
-
StringBuilder类型拼接字符串:时间和空间上都非常的节省,无论循环多少次,都创建一个对象。
-
String拼接字符串的步骤
(1) 创建一个StringBuilder的存储空间,大小为第一个字符串的长度+16(创建第一个对象)
(2) 将第一个字符串添加到缓冲区当中
(3) 将第二个字符串添加到缓冲区当中
(4) 将缓冲区对象转换成字符串对象(创建的第二个对象)
(5) 返回字符串
- StringBuilder拼接字符串的步骤l
(1) 创建一个新的StringBuilder存储空间
(2) 在StringBuilder的基础上进行添加,不创建新的字符串对象。
(3) 返回结果。
- 总结
(1) String对象拼接字符串效率比较低,StringBuilder拼接效率比较高。
String和StringBuilder的相互转换
- String转换为StringBuilder
(1) Append()方法
(2) StringBuilder()的构造方法
- StringBuilder转String
(1) toString()方法
(2) 使用String的构造方法