栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

String、StringBuffer、StringBuilder的联系与区别

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/605072.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号