1. 字符串就是双引号之间的数据
2. 字符串和数组初始化之后长度不变,内容不变,要改变值,则要新建字符串。每次new一个字符串,都是新建一个对象
3. String是java.lang包下的一个类
String stringName = new String("string content");
4. 常用方法
5. ==和equals()str.length() 返回字符串长度
str.indexof(ch) 查找ch在字符串第一次出现的位置,如果找不到返回-1
String[] arr=str.split(" ") System,out.println(Arrays.toString(arr)) 按空格将字符串拆分成数组
str.substring(a,b) 获取索引位置为a,b 之间的子串
String s2= s1.replace(String) 替换
str.charAt() 按照索引值获得字符串指定的字符
==:判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象
equals(): 比较存储在两个字符串对象中的内容是否一致
6. 将字符串转化为字节数组 bytes bt:str.getBytes()
public class Test {
public static void main(String[] args) {
// 定义一个字符串
String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";
// 出现次数
int num = 0;
//循环遍历每个字符,判断是否是字符 a ,如果是,累加次数
for (byte bt:(s.getBytes()))
{
// 获取每个字符,判断是否是字符a
if ( bt=='a' ) {
// 累加统计次数
num++;
}
}
System.out.println("字符a出现的次数:" + num);
}
7. StringBuilder
由于String的不可变性,档频繁操作字符时,会产生很多临时变量。StringBuffer是线程安全,而StringBuilder则没有,所以如果需要创建一个内容可变的字符串对象,应优先考虑使用StringBuilder类。
StringBuilder str1= new StringBuilder();
StringBuilder str2= new StringBUilder("immoc");
System.out.println(str2);
8. 方法
str.append(参数)
str. insert(位置,参数)
str.toString()
int length()
9. StringBuffer
StringBuffer 默认分配16字节长度的缓冲区,当字符串超过该大小时,会自动增加缓冲区长度,而不是生成新的对象。
StringBuffer、StringBuilder、String中都实现了CharSequence接口。
CharSequence是一个定义字符串操作的接口,它只包括length()、charAt(int index)、subSequence(int start, int end) 这几个API。
StringBuffer、StringBuilder、String对CharSequence接口的实现过程不一样,如下图所示:
图1 对CharSequence接口的实现
可见,String直接实现了CharSequence接口;StringBuilder 和 StringBuffer都是可变的字符序列,它们都继承于AbstractStringBuilder,实现了CharSequence接口。
总结
线程安全:- StringBuffer:线程安全
- StringBuilder:线程不安全
速度:
一般情况下,速度从快到慢为 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的。
使用环境:
- 操作少量的数据使用 String;
- 单线程操作大量数据使用 StringBuilder;
- 多线程操作大量数据使用 StringBuffer。