String家族--String、StringBuffer、StringBuilder

来源:互联网 发布:潍坊行知学校怎么样 编辑:程序博客网 时间:2024/05/16 09:46

一.String

 1String对象的初始化

由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下:

                            String s = “abc”;

                            s = “Java语言”;

                   其实按照面向对象的标准语法,其格式应该为:

                            String s = new String(“abc”);

                            s = new String(“Java语言”);

只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。例如String s = new String(“abc”);实际上创建了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。其它的构造方法的参数,可以参看String类的API文档。

2、String的连接

String s = "abc";String ss = "ok" + s + "xyz" + 5;
上述代码反编译后可以看到:

String ss = (new StringBuilder("ok")).append(s).append("xyz").append(5).toString();
从上面的代码很容易看出,虽然在源程序中使用了"+",但在编译时仍然将"+"转换成StringBuilder。因此,我们可以得出结论,在Java中无论使用何种方式进行字符串连接,实际上都使用的是StringBuilder。
那么是不是可以根据这个结论推出使用"+"和StringBuilder的效果是一样的呢?这个要从两个方面来看。

如果从运行结果来解释,那么"+"和StringBuilder是完全等效的。但如果从运行效率和资源消耗方面看,那它们将存在很大的区别。
如果程序中频繁循环使用“+”,就会创建多个StringBuilder对象,虽然Java有垃圾回收器,但这个回收器的工作时间是不定的。如果不断产生这样的垃圾,那么仍然会占用大量的资源。


二.StringBuffer  StringBuilder

当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。

和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象

StringBuilder类在Java 5中被提出,它和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(不能同步访问)

由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。


2 0
原创粉丝点击