当前位置 > 主页 > 万和大讲堂 >


Java的String、Buffer、Builder详解

2015-06-19 11:32

  小编最近发现团队成员在Java代码方面的质量不够高,写一些基础的文章,供大家学习参考。


  一、定义


  String是不可变字符序列。


  StringBuffer是可变的字符序列。


  StringBuilder也是可变的字符序列。


  1、StringBuffer和StringBuilder的唯一区别


  StringBuffer对象是线程安全的,这意味着StringBuffer对象可以同时被多个并行线程修改,因为它所有的方法都被声明为"synchronized(同步)"。南京Java培训


  StringBuilder类是JDK 1.5版引入的非线程安全的类,这意味着它的所有方法都是非同步方法。


  因此,在单一模型的应用中,我们应该使用StringBuilder,这样对象不会有锁定和解锁,这样性能就会增加。


  而在单线程模型应用中,会按顺序执行操作,因此对象不会崩溃。


  2、什么时候选择String和StringBuffer


  如果我们不需要在同一内存空间中存储字符串的修改,那么我们必须使用String。


  而如果需要在同一内存空间中存储字符串的修改,那么我们必须使用StringBuffer或StringBuilder。


  3、String的优缺点


  优点:使用String时,如果字符串发生修改,那么修改后的内容会保存在内存中的不同位置,这样的话,内存中就同时有原始的字符串值和修改后的字符串值。


  缺点:对于每一个这样的操作,它会消耗更多的内存,因为它把修改后的字符串值存储在新的内存空间中。因此它会导致性能问题。


  解决方案:要解决这个性能问题,软件开发者应该使用StringBuilder或者StringBuffer来实现字符串的修改,然后再转换成String对象把字符串传递给用户。


  4、StringBuffer和StringBuilder的优缺点


  优点:StringBuffer和StringBuilder有更好的性能,因为它们对内存的消耗更少,所有对字符串的修改操作都存储在同一内存位置。


  缺点:修改前的原始字符串值不会被保留。


  二、创建String或StringBuffer对象


  String对象的创建有两种方式


  1)直接使用字符串赋值创建对象


  String str = "instance of java for us";


  2)使用String构造器创建对象


  String str = new String("instance of java for us");


  StringBuffer对象的创建


  使用构造器


  StringBuffer str = new StringBuffer();


  StringBuilder对象的创建


  使用构造器


  StringBuilder str = new StringBuilder();


  三、在StringBuffer和StringBuilder只能执行指定的操作


  可以执行字符串的追加、插入、删除、反向等操作


  因为String对象是不可变的对象,因此这些操作不能在String对象中执行。南京Java培训


  四、字符串的连接


  使用String对象来把新字符串连接到现有的字符串上,有两种方法:


  1、使用“+”操作符


  2、使用concat()方法


  而使用StringBuffer连接字符串,只有一种方法:使用append()方法


  而使用StringBuilder连接字符串,只有一种方法:使用append()方法


  示例代码:


  package com.ch;


  public Class Demo{


  public static void main(String args[]) {


  String str="Java";


  StringBuffer sb= new StringBuffer("Java");


  StringBuilder sbr= new StringBuilder("Java");


  System.out.println(str.concat(" language"));


  System.out.println(sb.append(" language"));


  System.out.println(sbr.append(" language"));


  }


  }


  输出:


  Java language


  Java language


  Java language


  五、比较


  Object对equals()方法的定义是:对象a和b如果是同一个对象的引用,那么a.equals(b)返回true,否则返回false。


  而String类重写了Object的equals()方法,String对象的equals()方法比较的是内容,内容相等则返回true。南京Java培训


  StringBuffer和StringBuilder则没有重写equals()方法,与Object的equals()方法的定义相同。


最近开班 more>
  • Python基础班
  • Java全栈开发
  • 前端基础班
  • 软件测试
  • 云原生精英班
  • 云网预科班
  • CISP
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCM 12C
  • OCP 19C
  • RHCE 9.0
  • 随时开课
  • 12月26日
  • 随时开课
  • 12月4日
  • 12月16日
  • 12月9日
  • 12月21日
  • 1月6日
  • 12月30日
  • 12月16日
  • 12月21日
  • 12月7日
  • 12月7日
  • ——
  • 随时开课
  • 12月16日
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入