JAVA中String类与StringBuffer类的区别

在Java中有两种字符串的操作:String类和StringBuffer类(缓冲字符串处理类)。
下面先简单的说一下两者的区别。
String类和StringBuffer类都提供了相应的方法实现字符串的操作,但二者略有不同。

(1) String类
该类一旦产生一个字符串,其对象就不可变。String类的内容和长度是固定的。如果程序需要获得字符串的信息需要调用系统提供的各种字符串操作方法实现。虽然通过各种系统方法可以对字符串施加操作,但这并不改变对象实例本身,而是生成一个新的实例。系统为String类对象分配内存,是按照对象所包含的实际字符数分配的。

(2) StringBuffer类
查了查Buffer这个词,有缓冲的意思,这个类肯定有缓冲的功能。该类处理可变的字符串。如果要修改一个StringBuffer类的字符串,不需要再创建新的字符串对象,而是直接操作原来的串。该类的各种字符串操作方法与String类提供的方法不相同。系统为StringBuffer类分配内存时,除去当前字符所占的空间外,还提供另外的16个字符大小的缓冲区。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。

下面来举一些具体的实例

字符串的连接

String类有两种方法

第一种(“+”)

public class str{
  public static void main(String[] args){
      String str1="加特效!";
      String str2="Duang~~";
      System.out.println(str1+" "+str2);
    }
  }

第二种(”concat”)

public class str{
  public static void main(String[] args){
      String str1="加特效!";
      String str2="Duang~~";
      System.out.println(str1.concat(str2));
    }
  }

StringBuffer类的方法

public class str{
  public static void main(String[] args){
    //构建一个缓冲字符串的对象sb
    StringBuffer sb=new StringBuffer("加特效!");
    //通过append方法,在这个对象后面添加一个新字符串
    sb.append(" Duang~~");
    System.out.println(sb);
  }
}

最终输出的结果都为:加特效! Duang~~

通过上面的例子不难看出,String类在进行扩展的时候,需要实例两个对象,每个对象都会占用一定的内存,而StringBuffer类就不需要再实例化一个新的类,只需要调用一个扩展的方法就可以了。

还有一点StringBuffer类的内存容量是可扩展的。举个具体的例子:

public class str{
  public static void main(String[] args){
     //声明字符串对象sb
      StringBuffer sb=new StringBuffer(40);
      System.out.println(sb.capacity());   //输出字符串的容量capacity
      sb.ensureCapacity(100);         //扩充容量
      System.out.println(sb.capacity());   //输出字符串的容量capacity
    }
  }

capacity()方法代表了字符串对象在内存中,可以容纳字符串的个数。如果想要扩充内存容量,可以使用方法ensureCapacity()。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详细分析Java中String、StringBuffer、StringBuilder类的性能

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看API会发现,String.StringBuffer.StringBuilder都实现了 CharSequence接口,虽然它们都与字符串相关,但是其处理机制不同. String:是不可改变的量,也就是创建后就不能在修改了. StringBuffer:是一个可变字符串序列,它与String一样,在内存中保存的都是一个有序的字符串

  • java中 String和StringBuffer的区别实例详解

    java中 String和StringBuffer的区别实例详解 String: 是对象不是原始类型.            为不可变对象,一旦被创建,就不能修改它的值.            对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.            String 是final类,即不能被继承. StringBuffer: 是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象            它只能通过构造函数来建立,  

  • Java String 和StringBuffer的详解及区别

    Java String 和StringBuffer的详解及区别 Java平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含 多个字符的字符数据.String类表示内容不可改变的字符串.而StringBuffer类表示内 容可以被修改的字符串. 当你知道字符数据要改变的时候你就可以使用StringBuffer.典型地,你可以使用StringBuffers来动态构造 字符数据.另外,String实现了equals方法,new String("abc"

  • Java StringBuilder和StringBuffer源码分析

    StringBuilder与StringBuffer是两个常用的操作字符串的类.大家都知道,StringBuilder是线程不安全的,而StringBuffer是线程安全的.前者是JDK1.5加入的,后者在JDK1.0就有了.下面分析一下它们的内部实现. 一.继承关系 public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence public

  • Java 中 String,StringBuffer 和 StringBuilder 的区别及用法

    1 简介 在 Java 语言中,共有 8 个基本的数据类型,分别为:byte.short.int.long.float.double.boolean 和 char,其中 char 类型用于表示单个字符,例如 a.b.c .A.B.C.& 这些大小写字母或者特殊字符等等.在实际的编程中,单个的字符并没有我们想象中用的那么频繁,反而是多个字符组成的"字符串"更为常见,但是在基本的数据类型中,并没有字符串这种数据类型.为了解决这个问题,Java 语言为我们提供了一个被 final 关

  • Java那点事——StringBuffer与StringBuilder原理与区别

    最近在找工作,考官问我一个简单的题目:"StringBuffer与StringBuilder的区别,它们的应用场景是什么?",下面小编答案分享给大家,方便以后大家学习,以此也做个备录. 其实只要找下Google大神就有答案了:StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全

  • java 中String和StringBuffer与StringBuilder的区别及使用方法

    java 中String和StringBuffer与StringBuilder的区别及使用方法 1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a"; //假设a指向地址0x0001 a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向

  • 详解Java中字符串缓冲区StringBuffer类的使用

    StringBuffer 是一个线程安全的可变的字符序列.它继承于AbstractStringBuilder,实现了CharSequence接口. StringBuilder 也是继承于AbstractStringBuilder的子类:但是,StringBuilder和StringBuffer不同,前者是非线程安全的,后者是线程安全的. StringBuffer 和 CharSequence之间的关系图如下: StringBuffer类和String一样,也用来代表字符串,只是由于StringB

  • Java 中String StringBuilder 与 StringBuffer详解及用法实例

    在Android/Java开发中,用来处理字符串常用的类有3种: String.StringBuilder.StringBuffer. 它们的异同点: 1) 都是 final 类, 都不允许被继承; 2) String 长度是不可变的, StringBuffer.StringBuilder 长度是可变的; 3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的. String VS StringBuffer String 类型和StringBuffer的主要性

  • Java中StringBuffer和StringBuilder_动力节点Java学院整理

    下面先给大家介绍下String.StringBuffer.StringBuilder区别,具体详情如下所示: StringBuffer.StringBuilder和String一样,也用来代表字符串.String类是不可变类,任何对String的改变都 会引发新的String对象的生成:StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象.既然可变和不可变都有了,为何还有一个StringBuilder呢?相信初期的你,在进行append时,一般都会选择StringB

随机推荐