String、StringBuffer、StringBuilder的联系与区别

String、StringBuffer、StringBuilder的联系与区别,第1张

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
  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 方法进行扩展。而不要使用 "+"。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5611217.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存