一、String
1.final修饰,常量,长度不可以改变。不可以改变内容,但是指针可以改变
String s1 = "abc";
String s1 = "bcd";
没有错误,只是s1指向了另外一个地方,串"abc"没有改变。
2.内存
String s = "abc";//常量区
String s2 = new String("abc"); //常量区、内存区
3.==和equals()
==比较的是数值和地址
Object类的equals()默认比较的是地址,String类重写了equals方法,比较的是内容。
4.涉及到下标的方法,包含头,不包含尾
String s = "abc";
s.subString(start,end) :[ )
5.方法
(1)根据正则表达式切割split(str)
正则表达式是一个知识点
(2)字串subString()
(3)去掉两端空格trim()
(4)比较conpareTo(str),默认的是字典顺序
(5)转换(列举自己最常用的)
a.字符串与字符数组 String---char[]:
String s = new String(char[]);
char[] c = s.toCharArray();
b.字符串与字节数组 String---byte[]:
String s = new String(byte[]);
byte[] c = s.getBytes();
字符串与字节数组转换的时候可以指定编码:String s = new String(str.getBytes("GBK"),"GBK");
c.字符串与基本类型
String s = 1+"";
int a = Integer.parseInt("1");
。。。还有很多。
6.编码/解码
String s = "abc";
byte[] c = s.getBytes() //编码
s = new String(c) //解码
保证编码与解码使用的是一样的编码格式是一样的。默认使用的是GBK
String s = new String(str.getBytes("GBK"),"GBK");
二、StringBuffer
1.线程安全。
2.是字符串缓冲区,像名字一样。
3.可变长度,容器。常用append()添加。可以添加多种类型数据。最终可以用toString变成String。
4.很多方法与String是一样的
5.因为是线程安全的,加入了锁,就是加入了同步机制,执行慢
6.subString得到的是String,不是StringBuffer
三、StringBuilder
1.线程不安全
2.替代了StringBuffer,方法大致相同。
3.因为StringBuilder是线程不安全的,所以不用判断锁,所以执行快,效率高。
知识点:
经常做的操作是:(1)转为char数组后操作(2)toString(3)使用StringBuilder操作