49.String类结构分析
1.String 对象用于保存字符串,也就是一组字符序列
2.字符串常量对象是用双引号括起的字符序列
3.字符串的字符用Unicode字符编码,一个字符占2个字节
4.String 实现了接口 Serializable【String 可以串行化:可以在网络传输】
5.String 实现了接口 Comparable【String 对象可以比较大小】
6.String 是final类,不可以被继承
7.String 有属性 private final char value[]; 用于存放字符串内容
8.一定要注意:value 是一个final类型,不可修改(value地址不可修改)
50.String创建剖析
方式一:直接赋值 String s = "zkw";
方式二:调用构造器 String s2 = new String("zkw");
方式一:先从常量池查看置否有“zkw”的数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址
方式二:先在堆中创建空间,里面维护了value属性,指向常量池的zkw空间,如果常量池没有zkw,重新创建,如果有,直接通过value指向,最终指向的是堆中的空间地址
51.String类常用方法
String类是保存字符串常量的,每次更新都需要重新开辟空间
-
equals //区分大小写,判断内容是否相等
-
equalsIgnoreCase //忽略大小写的判断内容是否相等
-
length //获取字符的个数,字符串的长度
-
indexOf //获取字符在字符串中第1此出现的索引,索引从0开始,如果找不到,返回-1
-
lastIndexOf //获取字符在字符串中最后1次出现的索引,索引从0开始,如果找不到,返回-1
-
substring //截取指定范围的子串
-
trim //去前后空格
-
charAt //获取某索引处的字符,注意不能使用Str[index]这种方式
String str = "hello"; //str[0] 不对 //str.charAt(0) => h
-
toUpperCase //转换成大写
-
toLowerCase //转换成小写
-
concat //拼接字符串
-
replace //替换字符串中的字符
-
split //分割字符串,对于某些分割字符,我们需要 转义比如
-
compareTo //比较两个字符串的大小
-
toCharArray //转换成字符数组
-
format //格式字符串,%s字符串 %c字符 %d 整型 %.2f 浮点型
52.StringBuffer
StringBuffer代表可变的字符序列,可以对字符串内容进行增删,很多方法与String相同,但是StringBuffer是可变长度的;StringBuffer是一个容器
-
StringBuffer 的直接父类是 AbstractStringBuilder
-
StringBuffer 实现了 Serializaable,即StringBuffer的对象可以串行化
-
在父类中 AbstractStringBuilder 有属性 char[] value,不是final,该value 数组存放字符串,因此存放在堆中的
-
StringBuffer 是一个final类,不能被继承
String VS StringBuffer:
1.String保存的是字符常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低
2.StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高
StringBuffer构造器:
//1.创建一个大小为16的char[],用于存放字符内容 StringBuffer stringBuffer = new StringBuffer(); //2.通过构造器指定char[]大小 StringBuffer stringBuffer1 = new StringBuffer(100); //3.通过给一个tring创建StringBuffer,cahr[]大小就是str.length() + 16 StringBuffer stringBuffer2 = new StringBuffer("hello");
String和StringBuffer相互转换:
//看String--->StringBuffer String str = "hello tom"; //方式1 使用构造器 //注意:返回的才是StringBuffer对象,堆str本身没有影响 StringBuffer stringBuffer = new StringBuffer(str); //方式2 使用的是append方法 StringBuffer stringBuffer1 = new StringBuffer(); stringBuffer1 = stringBuffer1.append(str); //看StringBuffer--->String StringBuffer stringBuffer2 = new StringBuffer("嘻嘻哈哈"); //方式1 使用StringBuffer提供的 toString方法 String = stringBuffer2.toString(); //方式2 使用构造器 String s1 = new String(stringBuffer2);
StringBuffer方法:
1.增 append
2.删 delete(start,end)
3.改 replace(start,end,string) //将start---end间的内容替换掉,不含end
4.查 indexOf //查找子串在字符串第1次出现的索引,如果找不到返回-1
5.插 insert
6.获取长度 length
53.StringBuilder
一个可变的字符序列,此类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快
在StringBuilder上主要操作是append和insert方法,可以重载这些方法,以接受任意类型的数据
一般StringBuffer用在多线程,StringBuilder用在单线程