String家族--String、StringBuffer、StringBuilder
来源:互联网 发布:潍坊行知学校怎么样 编辑:程序博客网 时间:2024/05/16 09:46
一.String
1、String对象的初始化
由于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类。
- String家族--String、StringBuffer、StringBuilder
- 有关string家族的各个介绍 String;StringBuffer;StringTokenizer;StringBuilder
- String 、StringBuffer 和 StringBuilder
- String,StringBuffer,StringBuilder(转载)
- String、StringBuffer和StringBuilder
- String,StringBuffer,StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String StringBuffer StringBuilder
- String StringBuffer StringBuilder
- String StringBuffer StringBuilder
- String StringBuffer StringBuilder
- String ,StringBuffer ,StringBuilder问题
- String StringBuffer StringBuilder
- String StringBuffer StringBuilder 区别
- StringBuilder StringBuffer String
- StringBuilder。StringBuffer。String
- String,StringBuffer与StringBuilder
- LibGDX_1.1: LibGDX 跨平台游戏开发框架简介
- iOS 后台上传文件
- eclipse笔记
- 如何测试云硬盘
- [Medical Image Processing] 1. Introduction
- String家族--String、StringBuffer、StringBuilder
- LDR与ADR伪指令的区别
- 随意细解:UI -- KVO、图片异步下载
- 黑马程序员---GUI(布局管理器、事件)
- 148.Oracle数据库SQL开发之 大对象——在PLSQL中使用大对象
- 时间工具类
- CreateEvent http://blog.csdn.net/richerg85/article/details/7471426
- C++primer笔记之vector多态
- 高级多态(一):单继承存在的问题和dynamic_cast