1.String、StringBuffer、StringBuilder的常用API的功能
1.String的chatAt
char charAt(int index)
1).返回值是char类型,参数是int。
2).作用和C语言中字符串的下标取值一样,得到的是串中下标为index的字符。
3).下标从0开始,到w.length()-1 , 同C语言中字符串。An index ranges from 0 to length() - 1. (Api中的原话)
public class test {
public static void main(String[] args){
String s = new String("Hello world!");
System.out.println(s);
int i;
for(i = 0; i < s.length(); ++i)
System.out.print(s.charAt(i) + " ");
}
}
//运行结果
Hello world!
H e l l o w o r l d !
2.StringBuffer的append(char[] str)
StringBuffer append(char[] str)
Appends the string representation of the char array argument to this sequence.
返回一个StringBuffer 类型。
public class test {
public static void main(String[] args){
StringBuffer s = new StringBuffer("Hello");
System.out.println(s);
System.out.println(s.append(" world!"));
}
}
//测试结果
Hellow
Hellow world!
3.StringBuilder的append(char[] str)
StringBuilder append(char[] str)
Appends the string representation of the char array
argument to this sequence.
同.StringBuffer的append(char[] str)
public class test {
public static void main(String[] args){
StringBuilder s = new StringBuilder("Hello");
System.out.println(s);
System.out.println(s.append(" world!"));
}
}
//测试结果
Hellow
Hellow world!
2.简述String、StringBuffer、StringBuilder的联系与区别,使用场景
联系:三个都是java平台提供的字符串,都是可以用于存储和操作字符串。
区别:
- String 为字符串常量,StringBuffer与StringBuilder字符串变量,从而效率:String<StringBuffer<StringBuilder(一般情况下);
- StringBuffer是线程安全的,而StringBuilder为非线程安全;
- String 是不可变的对象, 每次对 String 类型进行改变的等同于生成了一个新的 String 对象,经常改变内容的字符串不建议使用 String;
- 对StringBuffer 类改变,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用,经常改变内容的字符串建议使用 StringBuffer ;
- StringBuffer 上的主要操作为 append 和 insert 方法。
使用场景:如果要操作少量的数据用 String
单线程操作字符串缓冲区 下操作大量数据用StringBuilder
多线程操作字符串缓冲区 下操作大量数据 用StringBuffer
3.为什么不建议在for循环中使用 "+" 进行字符串拼接
实例:
String str = "";
for(int i = 0; i < 10; i++){
str += "a";
}
反编译后代码如下:
String str = "";
for(int i = 0; i < 10; i++)
str = (new StringBuilder()).append(str).append("a").toString();
可以看到,反编译后的代码,在for循环中,每次都是new了一个StringBuilder,然后再把String转成StringBuilder,再进行append。而频繁的新建对象当然要耗费很多时间了,不仅仅会耗费时间,频繁的创建对象,还会造成内存资源的浪费。
所以,在循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。而不要使用 "+"。