String
Java中的String对象是final的,即 String 对象被创建之后就无法再对其进行修改。也就是说,尽管 String 类提供了替换(replace)、截取子串(subString)等方法,但这些方法都不是直接对原始的 String 对象进行操作,其操作结果会生成一个全新的字符串对象。当我们使用 + 来连接两个 String 对象的时候,该操作同样是创建出一个全新的字符串对象。
示例代码:
String str = "aaabbbcccddd";
String newStr = str.replace('a', 'A');
System.out.println(newStr);
说明:
替换之后的结果是生成了一个全新的字符串对象:newStr 。
StringBuffer
StringBuffer类是对String类的一个补充,它用来表示内容可变的字符串,并提供了修改底层字符串的方法。StringBuffer类从 JDK 1.0 就已经提供。
该类是线程安全的。
示例代码:
StringBuffer sb = new StringBuffer("aaabbbcccddd");
sb.replace(0, 3, "AAA");
System.out.println(sb.toString());
说明:
直接在 StringBuffer对象上进行操作。
API文档链接:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuffer.html
StringBuilder
我们可以将 StringBuilder 类看做是对 StringBuffer 的进一步补充。StringBuilder 类也表示内容可变的字符串,并且该类与 StringBuffer 有着相同的操作界面,唯一的区别就是 StringBuilder 类不是线程安全的。
JDK 1.5 开始提供 StringBuilder 类。
API文档链接:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuilder.html
效率的比较:
String str = "";
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 999999; i++){
str = str + i;
}
long endTime = System.currentTimeMillis();
System.out.println("执行时间:" + (endTime - beginTime));
运行时间太长了,没有等到程序运行结束就被我直接终止了。
StringBuffer buffer = new StringBuffer("");
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 999999; i++){
buffer.append(i);
}
long endTime = System.currentTimeMillis();
System.out.println("执行时间:" + (endTime - beginTime));
输出:
执行时间:250
StringBuilder builder = new StringBuilder("");
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 99999; i++){
builder.append(i);
}
long endTime = System.currentTimeMillis();
System.out.println("执行时间:" + (endTime - beginTime));
输出:
执行时间:188
在数量级相对较小的时候,StringBuffer和StringBuilder的区别不大,只有当数量级相对较大的时候才能体会到他们两个之间的效率差别。
StringBuffer为了做到线程安全,牺牲一定的效率是必然的。
在java中,String + StringBuffer + StringBuilder 基本涵盖了java字符串操作的所有方面,掌握好这三个工具类,基本的字符串处理可以无忧了。
原文出处:http://www.darkmi.com/blog/archives/1403
总结:String用于字符不需要做更改时,而使用+号,连接两个字符,效率比较低,其低层实现原理是,String str ="this is string";
StringBuffer tem = new StringBuffer(str);
tmp.append("second string");
str = tmp.toString();
分享到:
相关推荐
String,StringBuffer,StringBuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的
String StringBuffer和StringBuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证
StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别
String ,StringBuffer与StringBuilder的区别
String及StringBuffer和StringBuilder的区别
介绍了String、StringBuffer、StringBuilder的使用方法,以及理论知识
简单的介绍了String、StringBuffer和StringBuilder的区别
String、StringBuffer 和 StringBuilder 的区别 碎碎念 简单认识这三个对象 String StringBuffer StringBuilder 深入理解 String、StringBuilder、StringBuffer 从设计角度理解 String StringBuilder StringBuffer ...
string,stringbuffer,stringbuilder
string,stringBuffer,stringBuilder
Java中String,StringBuffer与StringBuilder的区别和用法。
下面小编就为大家带来一篇浅谈java中String StringBuffer StringBuilder的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
目录StringStringBuffer与StringBuilder总结 String ...StringBuffer与StringBuilder 这两者基本相似,都是可变字符串对象,主要区别为线程是否安全。 总结 最后,引用菜鸟教程下的总结以及相关评论: S
StringBuilder三者之间的区别是很有必要的,很多面试面试官都会问到这个知识点。集合网络上很多牛人的各种经典分析的总结,花了两个小时概括总结得出了现在这个最全面、最详细、最精辟、最透彻的解答。 不管是菜鸟...
主要介绍了Java 中 String,StringBuffer 和 StringBuilder 的区别及用法的相关资料,需要的朋友可以参考下
BATJ面试题讲解-String、StringBuffer、StringBuilder的区别
主要介绍了java 中String和StringBuffer与StringBuilder的区别及使用方法的相关资料,在开发过程中经常会用到String 这个类进行操作,需要的朋友可以参考下
stringbuilder用法 String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String...
java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间有什么区别呢?下面小编给大家总结了Java中String、StringBuffer、StringBuilder的区别详解,需要的朋友参考下吧