1.String类
String是一种引用类型,表示字符串类型,它是一个类,表示字符串。字符串的字符使用Unicode字符编码,一个字符占两个字节。
字符串的底层是字符数组。String类型的字符串是不可更改的,如果需要改字符串会自动在内存堆的永久区中的字符串常量池中产生一个新的字符串。
① String str = "kkk";
② String str = new String("kkk");
上面这两种字符串初始化的存储过程是不一样的。第一种在字符串常量池中产生字符串"kkk",然后str引用直接指向字符串常量池中的"kkk"字符串。第二种会在堆的GC区中创建一个字符串对象,然后将字符串常量池中的"kkk"字符串赋值给GC区中的对象,这时引用是指向GC区中的字符串对象的,而不是像①那样直接指向字符串常量池中的"kkk"。
String类中有很多常用的方法:
public int length(). // 获取字符串的长度
public char charAt(int index) // 获取指定下标处的字符
public boolean equals(Object anObject) // 比较当前对象和参数中的对象是否相等
public int compareTo(String anotherString) // 比较当前对象和参数中的字符串的大小 public int indexOf(String s) // 返回参数中的子串在当前字符串中首次出现的下标, 如果子串不存在, 返回-1
public int indexOf(String s ,int startpoint) indexOf(",", 16)
public int lastIndexOf(String s) // 从右向左搜索 lastIndexOf(",")
public int lastIndexOf(String s ,int startpoint) // lastIndexOf(",", 20)
public boolean startsWith(String prefix)
public boolean endsWith(String suffix) // 判断此串是否以指定的子串结尾, endsWith("大家好")
public String substring(int startpoint)
public String substring(int start,int end),// 从此串截取子串, 从第一个参数指定的下标开始(包含)到第二个参数指定下标结束(不包含) substring(12, 18)
pubic String replace(char oldChar,char newChar) // 替换字符串中的所有旧字符为新字符
public String replaceAll(String old,String new)
public String trim() // 去掉首尾空白字符(空格及小于它的所有字符)
public String concat(String str) concat("hhh"); //连接字符串
public String[] split(String regex) // 把字符串切割成多个部分, 以参数中的子串为切割器 split(",")
在使用split()方法时,如果分隔符是特殊字符,例如'+'、'*',需要进行转义。
split("\\+");
aplit("\\*");
2.StringBuffer类
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
很多方法与String相同,但StingBuffer是可变长度的。
StringBuffer是一个容器。
StringBuffer与String的区别是StringBuffer字符串是可变的,它可以通过调用append()方法追加字符串,并且返回值还是本身对象。因此,可以连续调用append()方法实现连续追加同一个字符串对象。
StringBuffer sbf = new StringBuffer("kkk");
sbf.append("LLL").append("MMM")..append("NNN");
以上写法是可以的,最终"kkk"字符串对象会变成"kkkLLLMMMNNN"。
StringBuffer是线程安全的。
3.StringBuilder类
与StringBuffer类相似,但是线程不安全,不过效率比StringBuffer高。通常在单线程时使用StringBuilder。
by Karl