StringBufffer类和StringBulider类

2024-04-18 09:28

本文主要是介绍StringBufffer类和StringBulider类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        StringBuffer类和StringBulider类都是抽象类AbstractStringBuilder类的子类,这是两个极为相似的类,除了在必要条件下做区分,一般情况下并不重视二者的区别,因为二者几乎有着相同的作用和方法,都可以代表java中的可变字符序列。

        由于在StringBuffer类和StringBulider类的父类AbstractStringBuilder中,用于储存字符床信息的数组与String类不同,并没有用final关键字进行修饰,因此在储存字符串信息时,字符串信息时可以改变的,也就是说,当创建一个StringBuffer类或者StringBuilder类的对象时,当对这个对象中的字符串数据进行修改时,它会变成一个新的字符串,之前的字符串就已经不存在了。

        对于StringBuffer类和StringBuilder类,二者之间的区别为StringBuffer类是JDK1.0版本提供的类,这个类在运行时会做线程同步检查,它的线程是安全的,因此它的效率较为低下,而与之相对的StringBuilder类则是JDK1.5版本提供的类,它在运行时不会做线程同步检查,因此它的线程时不安全的,但是它的优点是效率较高。因此也就是说在不涉及线程安全问题时更加推荐使用StringBuilder类。

        由于StringBuffer类和StringBuilder类的相似性,因此只要掌握了其中一个便可以直接掌握另一个类的使用。这里以StringBuilder类为例。在这个类中,常用的方法包括append(...)、delete(int start,int end)、deleteCharAt(int index)、insert(...)、reverse()、toString()、以及indexOf(String str)、indexOf(String str,int fromIndex)、substring(int start)等。其中前六种是StringBuilder类特有的方法,后面的是和String类同类型的方发,用法都一样。而在前六种StringBuilder类的特有方法要注意的一点是,使用后这个方法返回的是自身对象,也就是说返回的值仍然储存在原来数组中,并没有新建对象,这也和之前的表述一致。

        在上面的六个方法中,append方法是比较基础的,它能够在一个字符串的后面添加指定的字符串,并且可以连续使用,也就是说可以调用一个append方法后它会马上返回一个字符串,这是如果直接在这后面跟上以个append方法的话,那么它会在先返回的那个字符串上使用append方法。同理,其他的方法也有类似的用法,以下为演示代码。

package com.string.test;public class Test01 {public Test01() {}public static void main(String[] args) {StringBuilder sb = null;sb = new StringBuilder("gao");sb.append(1236);sb.append("xiusiu");System.out.println(sb);sb.append("aa").append("bb").append("cc");for(int i = 0; i < 10; ++i) {sb.append(i);System.out.println(sb);}System.out.println("_____________________________");StringBuffer sb1 = new StringBuffer("北京尚学堂");sb1.insert(0, "爱").insert(0, "我");System.out.println(sb1);System.out.println(sb1.length());sb1.delete(0, 1).delete(0, 1);System.out.println(sb1);sb1.deleteCharAt(0).deleteCharAt(0);System.out.println(sb1);System.out.println(sb1.charAt(2));System.out.println(sb1.reverse());}
}

        经过上面的叙述可以引申出一个思考来,那就是可变字符串存在的意义是什么?这里就要回到之前对String类的介绍中来,根据《java中的String类简介》一文的介绍可以知道,在String类中对字符串对象进行修改时,会产生一个新的字符串,但是原本的字符串对并不会消失,这也就意味着,当我们不使用原本的字符串时他们仍然储存在内存中,占据了储存空间,如果是非常简单的程序的话可能并没有多大影响,但是如果是涉及到循环之类的,那么使用不可变字符序列将会导致大量的资源浪费。而可变字符序列由于在对字符串进行操作时返回的是本身的字符串对象,因此不会造成储存空间的浪费。比如在下面的这个程序中对String类和StringBuilder类在操作字符串时的时间以及储存空间的变化上进行对比,可以明显发现二者之间的差别。

package com.string.test;public class EfficiencyTest {public static void main(String[] args) {/*使用String进行字符串拼接*/String str8 = "";//本质上使用StringBuilder进行拼接,但每次循环都会生成一个StringBuilder对象long num1 = Runtime.getRuntime().freeMemory();//获取系统剩余内存空间long time1 = System.currentTimeMillis();//获取系统当前时间for (int i = 0; i < 5000; i++) {str8 = str8+i;}long num2 = Runtime.getRuntime().freeMemory();long time2 = System.currentTimeMillis();System.out.println("String占用内存:"+(num1-num2));System.out.println("String占用时间:"+(time2-time1));/*使用StringBuilder进行字符串拼接*/StringBuilder sb = new StringBuilder();long num3 = Runtime.getRuntime().freeMemory();long time3 = System.currentTimeMillis();for (int i = 0; i < 5000; i++) {sb.append(i);}long num4 = Runtime.getRuntime().freeMemory();long time4 = System.currentTimeMillis();System.out.println("StringBuilder占用内存:"+(num3-num4));System.out.println("StringBuilder占用时间:"+(time4-time3));}
}

 

这篇关于StringBufffer类和StringBulider类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914389

相关文章

Java中StringBulider详解

StringBuilder 是 Java 中一个用来创建可变字符串的类。与 String 类不同,StringBuilder 对象能够被修改,不会创建新的对象,因此在需要进行大量字符串操作时,StringBuilder 更高效。以下是 StringBuilder 的详细讲解。 创建 StringBuilder 对象 可以通过以下几种方式创建 StringBuilder 对象: 使用默认构造

String,StringBuffer,stringBulider三者的区别

String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象(为什么?问问 Java 的设计者吧,为什么 String 不是原生类型呢?)因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产

Java 字符串 String、StringBulider和StringBuffer

文章目录 一、可变和不可变对象1、String2、StringBuffer和StringBuilder 二、不可变对象的好处 一、可变和不可变对象 可变对象:当您拥有对对象实例的引用时,该实例的内容可以更改 不可变对象:当您拥有对对象实例的引用时,该实例的内容无法更改 使用java.lang.String作为不可变类,使用java.awt.Point作为可变类 public

StringBulider类的扩展机制

StringBuilder的扩容机制详解 StringBuilder是一个可变的字符序列,是字符串缓冲的一个类,和String一样是用来操作字符串的,不同的时候StringBuilder在操作字符串的时候效率比String高.主要体现在对字符串进行拼接的时候.所以我们在对字符串进行拼接的时候首选使用StringBuilder类. 今天主要给大家说一说有关StringBuilder类扩容的问题.