在平常的开发中,很多人喜欢使用String这个类来定义一些字符串,而且创建的很多,个人感觉不是很适合。
String:一个final类,是不可变的,重新赋值时,会返回一个新的对象
StringBuffer:是字符串变量,它的内容是可以进行修改的,而且还是线程安全的
StringBuilder:和StringBuffer基本上差不多,但是是线程不安全的,所以单线程的情况下,性能快于StringBuffer
对比性能:
String的内容是不可以改变的,当我们创建一个对象后,在会先在栈内存中进行查找,看看是否存在相同的,如果存在,那么不再继续创建,直接引用就可以了,否则需要单独创建一个。
所以性能上会存在问题,当我们在一个循环中多次对String进行赋值的时候,而且每次的值都不一样,那么系统会创建多个对象,这样虚拟机的内存很快就会被占用完毕,从而导致内存溢出。
通过下面的例子来观看两者的运行速度
同样循环50000次来修改字符串值,最后输出前后时间,为了避免多线程获取cpu的时间不一定,所以采用单线程来进行
package com.jacksoft.string; import java.util.Date; /** * 测试String和StringBuffer * @author Jack * */ public class StringAndStringBufferTest { public static void main(String[] args) { testString(50000); testStringBuffer(50000); } private static void testString(int count){ System.out.println("String 开始秒:" + new Date().getSeconds()); String testStr = ""; for(int i = 0; i < count ; i++){ testStr += i; } System.out.println("String 结束秒:" + new Date().getSeconds()); } private static void testStringBuffer(int count){ System.out.println("StringBuffer 开始秒:" + new Date().getSeconds()); StringBuilder testSb = new StringBuilder(""); for(int i = 0; i < count ; i++){ testSb.append(i); } System.out.println("StringBuffer 结束秒:" + new Date().getSeconds()); } }
得到的结果如下:
String 开始秒:14 String 结束秒:30 StringBuffer 开始秒:30 StringBuffer 结束秒:30
同样是循环5w次,但是String花费了16秒,所以性能上次于StringBuffer
相关推荐
String,StringBuffer,StringBuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的
String StringBuffer和StringBuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证
String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别
StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
下面小编就为大家带来一篇浅谈java中String StringBuffer StringBuilder的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
String ,StringBuffer与StringBuilder的区别
介绍了String、StringBuffer、StringBuilder的使用方法,以及理论知识
简单的介绍了String、StringBuffer和StringBuilder的区别
String及StringBuffer和StringBuilder的区别
stringbuilder用法 String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String...
string,stringbuffer,stringbuilder
String、StringBuffer 和 StringBuilder 的区别 碎碎念 简单认识这三个对象 String StringBuffer StringBuilder 深入理解 String、StringBuilder、StringBuffer 从设计角度理解 String StringBuilder StringBuffer ...
string,stringBuffer,stringBuilder
目录StringStringBuffer与StringBuilder总结 String ...StringBuffer与StringBuilder 这两者基本相似,都是可变字符串对象,主要区别为线程是否安全。 总结 最后,引用菜鸟教程下的总结以及相关评论: S
它们与String类类似,但是不同之处在于,StringBuffer和StringBuilder可以修改字符串内容,而String对象是不可变的; StringBuffer和StringBuilder类的用法基本相同,但StringBuilder类的效率更高,因为它不是线程...
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,...
StringBuffer和String_区别 java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的...
主要介绍了Java 中 String,StringBuffer 和 StringBuilder 的区别及用法的相关资料,需要的朋友可以参考下
Java中String,StringBuffer与StringBuilder的区别和用法。
Java的StringBuffer和StringBuilder类是用于字符串操作的可变字符序列类。本文将介绍Java StringBuffer和StringBuilder类的常见操作和用法,包括创建、追加、插入、删除、替换、反转等操作。我们还会讨论如何获取...