JAVA6,请使用字符串加操作
2009-09-07 11:56
591 查看
http://blog.csdn.net/axman/archive/2009/09/03/4516565.aspx
诗剑书生
从JAVA诞生那天起,稍微“有些水平”的程序员都被告知,如果有大量的字符串连结,请不要使用字符串相加,而应该使用
StringBuffer的append操作然后toString().到了JAVA5,我们又被告诉知,StringBuilder是StringBuffer的非同步版,所以绝对大多数时候我们“更”可以用StringBuilder
来代替加操作。因为一个可能被多线程访问的实例字段的StringBuffer操作的情况很少,和在方法中调用字符串连结相比1%都不到。
但是到了JAVA6,因为编译器“始终”把字符串的+连结编译成StringBuilder,所以在99%的情况,我们应该使用加操作。
理由是:
1.用加操作比其它操作看起来直观,写起来省事,JAVA6之前,即使明知道有性能问题我们还会在一些时候全使用+连结,根本原因当然是
这种写法直观,简单。
String str = "Axman" + " is " + "a great lion.";
//请注意,这里的例子只是为了说明"+"写法直观,并不是说只有常量字符串相加(常量字符串其实直接编译成一个字符串而不是
//append了)JAVA6才优化,那是之前的事,对于JAVA6,只要有是字符串操作的的+连结(第一个变量或常量是字符串),后面不管是常量还是变量,都会进行编译优化
StringBuilder sb = new StringBuilder();
sb.append("Axman")
.append(" is ")
.append(" a great lion.");
String str = sb.toString();
谁要说第二种试方式美观写起来爽我一定当面抽他。打到他脑子正常为止。
2.我们有时还自觉不自觉地使用StringBuffer,而JAVA6总是把第一种形式优化为StringBuilder,在99%的情况下性能更好,除非你需要一个被多线程访问的实例字段操作。
3.特别是,有时我们自己写StringBuilder时,sb.append(line);后来想在前后加一个"<",">",于是很懒地写成
sb.append("<"+line+">");这种情况非常多,但这样情况是先生成一个StringBuilder计算"<"+line+">",然后toString()
StringBuilder所append,还不如全部加操作让编译器用一个StringBuilder来append.
当然,循环中加操作千万不要这么做(这种需求除了测试,实际应用可能是万分之一的机会吧?),编译器虽然会优化编译,但它是在循环内部生成StringBuilder而不是在外部。这种情况一定要自己在外部手工定义StringBuilder而不能依赖编译器了。但绝对多数情况,也就是99%的情况我们是 str = "axman" + new Object() +1 + "good" +.......这种方式,完全可以信任编译器来优化。
另外只有两个字符串连结时请使用concat.
相关文章推荐
- [改善Java代码]推荐在复杂字符串操作中使用正则表达式
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式 .
- 1 通过JNI混合使用Java和C++ -----> 操作字符串
- 使用javap分析Java的字符串操作
- 使用Java JSONObject操作JSON字符串对象
- Java使用正则表达式及字符串操作,抽取网页信息
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
- [编写高质量代码:改善java程序的151个建议]建议57 推荐在复杂字符串操作中使用正则表达式
- JAVA6,请使用字符串加操作。
- 使用java.lang.String和java.lang.BufferString操作字符串
- Java_正则表达式_推荐在复杂字符串操作中使用正则表达式
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
- 使用Java操作JSON字符串对象
- 在Java中使用标准输入输出设备进行字符串,整数浮点数等 的输入输出操作
- 使用Java操作JSON字符串对象
- JAVA6,请使用字符串加操作
- JAVA使用POI操作excel
- 使用mac学习java的一些基本操作
- Java的split方法使用多种分隔符切分字符串