String、StringBuffer、StringBuilder的联系与区别

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平台提供的字符串,都是可以用于存储和操作字符串。

区别:

  1. String 为字符串常量,StringBuffer与StringBuilder字符串变量,从而效率:String<StringBuffer<StringBuilder(一般情况下);
  2. StringBuffer是线程安全的,而StringBuilder为非线程安全;
  3. String 是不可变的对象, 每次对 String 类型进行改变的等同于生成了一个新的 String 对象,经常改变内容的字符串不建议使用 String;
  4.  对StringBuffer 类改变,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用,经常改变内容的字符串建议使用 StringBuffer ;
  5. 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 方法进行扩展。而不要使用 "+"。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值