String、StringBuilder、StringBuffer

讲在前面

  • 如果要对字符串进行频繁的修改,应采用StringBuilder或StringBuffer类
  • 两者不同体现在StringBuffer类是线程安全的,StringBuilder不是
  • 线程安全是有成本的,影响性能,字符串对象及操作大部分情况下不存在线程安全问题,适合使用StringBuilder类
public static void main(String args[]){
    //基本用法
    StringBuilder sb = new StringBuilder();

    //通过append方法添加字符串
    sb.append("周末也要学习");
    sb.append(",提升只争朝夕");
    //通过toString方法获取构建后的字符串
    System.out.println(sb.toString());

    //String可以直接使用+和+=运算符,java编译器一般会生成StringBuilder,+和+=操作会转换为append,例如
    String hello = "hello";
    //这里会转换为 StringBuilder hello = new StringBuilder("hello")
    hello += ",world";
    //这里会转换为 hello.append(",world")
    System.out.println(hello);
    //这里会转换为 System.out.println(hello.toString());

    //简单情况下可以直接使用String的+和+=,但对于复杂情况,尤其是有循环的时候,应该直接使用StringBuilder,例如
    String hi = "hello";
    for(int i=0; i<3; i++){
        hi += ",world";
        //这里相当于:
        //StringBuilder sb = new StringBuilder(hi);
        //sb.append(", world");
        //hi = sb.toString();
        //在for循环中会生成过多的StringBuilder
    }
    System.out.println(hi);

    //重新写一下
    StringBuilder hi_again = new StringBuilder("一定要多多");
    for(int j=0; j<3; j++){
        hi_again.append("练习");
    }
    System.out.println(hi_again.toString());
}

你可能感兴趣的:(String、StringBuilder、StringBuffer)