`

Java String 与 StringBuffer 用法区别

阅读更多
转载
String类用来表示那些创建后就不会再改变的字符串,它是immutable的。而StringBuffer类用来表示内容可变的字符串,并提供了修改底层字符串的方法。

--当我们进行字符拼接时,请使用StringBuffer类而非String类,因为前者将比后者快上百倍。

的确,在程序的太多场合我们都会进行字符串拼接工作,简单的代码示例如下:

String str="You are nice.";
str+="I love you so much.";

如果用StringBuffer类的话,代码如下:

StringBuffer str= new StringBuffer("You are nice.");
str.append("I love you so much.");

从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁,更单纯呢?其实不然,让我们了解一下程序运行内部发生了哪些事情:

经编译后程序的bytecode(字节码)展示出了实质: 在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将"You are nice."和"I love you so much."创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的str了,这个引用的名称没变,但它指向了新的String对象。

而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String("I love you so much."),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。

可以想象,当我们的字符串要被循环拼接若干段时,用String类直接操作会带来多少额外的系统开销,生成多少无用的临时StringBuffer对象,并处理多少次无谓的强制类型转换哪。


String 类

    String 类提供了几种字符串创建方法。

    String s = "abcd" 使用字符串常量自动创建String实例。
    String s = new String(String s)通过String 对象或字符串常量传递给构造方法。
    public String (char value[],int offset, int count)将字符数组一部分赋给String 构造方法,offset 为起始下表, count 为数组长度。



    String 类提供了丰富的字符串操作方法,其中重要的例举如下。

    public int lenght() 返回字符串的长度。
    public char charAt(int index) 返回字符串位置index处的字符。
    public boolean equals(Object o) 比较两个字符串对象,相等则返回true;反之返回false。
    public int compareTo(String s) 比较两个字符串字典顺序,相等返回0,s大于当前字符串返回一个负值,s小于当前串返回一个正值。
    public boolean regionMatches(int toffset,String other,int ooffset,int len)从当前字符串位置toffset开始寻找字符串other中起始位置为ooffset 长度为len 的子串。如发现匹配,返回true; 否则,返回false。
    public boolean startsWith(String prefix) 从当前字符串的起始位置开始寻找字符串 prefix。如发现匹配,返回true;否则,返回false。
    public boolean endsWith(String suffix) 如当前字符串的结尾子串与 suffix 匹配,返回true;否则,返回false。
    public int indexOf(String str) 在当前字符串中寻找与str匹配的子串,返回首次匹配的起始下表值;无匹配返回-1。
    public String substring(int beginIndex,int endIndex) 在当前字符串中,求从起始位置 beginIndex 到结束位置 endIndex 的子串。
    public String concat(String str) 将当前字符串与str连接,返回连接后的字符串。
    public String toLowerCase() 将当前字符串全转换为小写形式。
    public String toUpperCase() 将当前字符串转换为大写形式。
    public char toCharArray() 将当前字符串转换为字符数组。
    public Static String valueOf(type variable) 把variable 转换为字符串,其中 type 表示 variable 的数据类型。






StringBuffer类

    String类实现一种不能改变的静态字符串,StringBuffer类实现一种动态可以改变的字符串。StringBuffer类可以用于创建String类,StringBuffer一旦建立,可以用toString()方法将其转换为String类,以后,就可以使用String 类方法来操作。
   
    StringBuffer 类提供了三种创建方法。

    public StringBuffer()    创建一个空的StringBuffer类。
    public StringBuffer(int length)    创建一个大小为length的StringBuffer类。
    public StringBuffer(String str)    按str创建一个动态可变的StringBuffer类。


    StringBuffer    类提供的方法主要用于把输入的数据转换为String类。输入数据可来自键盘或其他数据源。类型可以是字符,字符数组,证书,浮点数和Object类型等。

    public int length()    返回缓冲区的字符数
    public int capacity()    返回缓冲区的容量大小,其值为:字符串长度+16。
    public synchronized StringBuffer append(type variable)    把variable转换为字符串,然后与当前字符串连接。
    public synchronized StringBuffer append(Char(char ch))    把字符ch连接到当前串尾。
    public synchronized StringBuffer insert(int offset,type variable)    把variable转换为字符串,然后插入到当前串中由offset指定的位置。
    public synchronized StringBuffer insert(int offset,char ch)    把字符 ch 插入到当前串由ofset指定的位置。
    public synchronized String toString()    把StringBuffer转换为字符串String。各个方法的使用,具体请参阅 JAVA API文档。
分享到:
评论

相关推荐

    String StringBuffer和StringBuilder区别之源码解析

    在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、StringBuffer和StringBuilder进行深入分析,了解它们之间...

    JAVA中String与StringBuffer的区别 自己的学习笔记总结

    ### JAVA中String与StringBuffer的区别 在Java编程语言中,`String` 和 `StringBuffer` 都是非常重要的类,它们用于处理字符串数据。虽然它们都实现了字符串操作的功能,但它们之间存在一些重要的区别,这些区别...

    java面试笔试题String 和StringBuffer的区别

    综上所述,理解`String`与`StringBuffer`之间的区别以及它们各自的适用场景,对于开发出高效、健壮的Java应用程序至关重要。在面试或笔试中,能够清晰地阐述这两个类的特点及其使用场合,将展现出你对Java基础概念的...

    String与StringBuffer区别详解

    在Java编程语言中,`String`和`StringBuffer`(在Java 5之后被`StringBuilder`取代,但在多线程环境中仍然使用`StringBuffer`)是处理文本字符串的两个核心类,它们各自有着不同的特性和用途。理解它们的区别对于...

    String、StringBuffer、StringBuilder的使用方法

    在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个重要类,它们各自有特定的使用场景和优缺点。理解它们的差异对于编写高效的代码至关重要。 **String类** `String`是不可变的类,...

    Java中String,StringBuffer与StringBuilder的区别

    最后,让我们总结一下 Java 中 String, StringBuffer 与 StringBuilder 三种字符串类型的区别和用法。String 类型是不可变的对象,性能不好,适合不需要修改的字符串对象。StringBuffer 类型是可变的对象,性能好,...

    String ,StringBuffer与StringBuilder

    String, StringBuffer 与 StringBuilder 的区别 在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String ...

    string与stringbuffer的区别

    例如,`"yacht1" + "yacht2" + "yacht3" + "yacht4"`在编译时会被合并成一个单独的字符串常量,因此在某些情况下,即使使用`String`也可能达到与`StringBuffer`相近的性能。然而,这种优化并不总是发生,特别是在...

    string和StringBuffer的区别

    在Java编程语言中,`String`和`StringBuffer`都是用来表示和操作字符串的重要类,但它们在使用场景和性能上有显著的区别。了解这些差异对于编写高效、优化的代码至关重要。 首先,`String`类是不可变的。这意味着...

    String和StringBuffer的区别

    在Java编程语言中,`String`和`StringBuffer`都是用来表示和操作字符串的重要类,但它们在性能和使用场景上有显著的区别。 首先,`String`类是不可变的,这意味着一旦创建了一个`String`对象,它的内容就不能改变。...

    String、StringBuilder和StringBuffer的区别

    在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...

    浅析Java中String与StringBuffer拼接的区别

    在Java编程语言中,String和StringBuffer类都用于处理字符串,但它们在处理字符串拼接时有着显著的区别。本文将详细解析这两个类在拼接字符串时的行为差异。 首先,我们来了解一下String类。String对象在Java中是不...

    StringBuffer和String_区别

    ### StringBuffer与String的区别详解 #### 一、概念与特性 **String** 是 Java 中一个不可变的类,代表了字符序列。一旦一个 String 对象被创建后,其内容就不能被改变。这使得 String 类非常适合用来表示常量或者...

    Java语言中StringBuffer的用法

    本文将深入探讨`StringBuffer`的用法,包括其常用方法,并通过实例对比`StringBuffer`与`String`的区别。 首先,我们来了解`StringBuffer`的核心特性。`String`类在进行字符串拼接时会创建新的对象,而`...

    String和StringBuffer详细用法总结

    根据给定的信息,本文将对`String`与`StringBuffer`在Java中的使用进行详细的解析与对比,并结合实例深入分析二者的异同及其适用场景。 ### `String` 和 `StringBuffer` 的基本概念 #### `String` 在Java中,`...

    JavaString、StringBuffer、StringBuildermd,学习代码

    总之,掌握`String`、`StringBuffer`和`StringBuilder`的用法,理解`Tomcat`的工作原理,以及清楚`Cookie`、`Session`和`localStorage`、`sessionStorage`的区别,对于Java后端开发和Java Web应用的构建是基础且关键...

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

    Java中String和StringBuffer的区别实例详解 Java中String和StringBuffer都是用来存储字符串的对象,但是它们之间有着很大的区别。下面我们来详细介绍Java中String和StringBuffer的区别实例详解。 首先,String是不...

Global site tag (gtag.js) - Google Analytics