WEB开发网
开发学院软件开发Java Java高效运行必备:如何选择使用String、StringBu... 阅读

Java高效运行必备:如何选择使用String、StringBuffer与StringBuilde

 2009-09-09 00:00:00 来源:WEB开发网   
核心提示: ● String是字符串常量 ● StringBuffer是字符串变量(线程安全) ● StringBuilder是字符串变量(非线程安全) 简要的说,String类型和StringBuffer类型的主要性能区别其实在于,Java高效运行必备:如何选择使用String、StringBuffer与

● String是字符串常量

● StringBuffer是字符串变量(线程安全)

● StringBuilder是字符串变量(非线程安全)

简要的说,String类型和StringBuffer类型的主要性能区别其实在于,String是不可变的对象,因此在每次对String类型进行改变的时候,其实都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM的GC就会开始工作,那速度是一定会相当慢的。

而如果是使用StringBuffer类则结果就不一样了,每次结果都会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用StringBuffer,特别是字符串对象经常改变的情况下。而在某些特别情况下,String对象的字符串拼接其实是被JVM解释成了StringBuffer对象的拼接,所以这些时候String对象的速度并不会比StringBuffer对象慢,而特别是以下的字符串对象生成中,String效率是远要比StringBuffer快的:

String str = “This is only a” + “ simple” + “ test”;
StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:

String str = “This is only a” + “ simple” + “test”;

其实就是:

String str = “This is only a simple test”;

Tags:Java 高效 运行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接