String中的“+”和StringBuilder
来源:互联网 发布:b站的优质up主 知乎 编辑:程序博客网 时间:2024/05/16 17:52
如题,大家都能看出来这是要做字符串连接操作,有些基础的人都会知道,String是不可修改的,而正因为此,大家一定会认为,用“+”将String相连接会随着“+”的增多,而产生越来越多的String,性能一定十分低,而真是这样吗?
例如:
public class Concatenation{
public static void main(String[] args){
String mango = "mango" ;
String s = "abc"+ mango + "def" +47 ;
System.out.println(s) ;
}
}
如上代码,按我以前的想法,该方法为了得到最后的[s],过程中产生了两个垃圾--->[abcmango],[abcmangodef],但是,其实不是这样的!!!
用命令
|-java -c Concatenation
生成JVM字节码文件,这是你会看出(J2SE1.5以上)编译器自动引入了StringBuilder类,并且调用了四次append()方法,最终调用toString(),来完成操作。
但是,你要注意,你不可以仗着编译器会给你转成StringBuilder就随意的“+”,这种优势只体现在没有循环的情况下,当有循环的时候,在循环体中每次“+”都会新实例化一个StringBuilder的对象这样也相当的影响性能,而此时,需要你在循环体外定义StringBuilder对象,再在循环体中进行append(),这样的性能是最好的!
大家可千万不要小瞧了StringBuilder啊,他可是最快的啦,比StringBuffer要快(StringBuffer是考虑线程安全的!所以会慢些),当你需要循环上百次,甚至循环中套循环的话,StringBuilder绝对是提高性能的良方。
by the way,请记住,对于一个方法而言,参数是为该方法提供信息的,而不是让该方法改变自己。--->这样会使得代码更容易阅读和编写。
好险啊,差点就没坚持,呵,天啊,这才第二天啊,亮哥加油!
- String中的“+”和StringBuilder
- DotNet中的String和StringBuilder
- C#中的string和StringBuilder
- Java中的字符串 String, StringBuffer和StringBuilder
- AVA中的String、StringBuffer和StringBuilder
- Java中的String、StringBuffer和StringBuilder
- java中的String,StringBuffer和StringBuilder浅谈
- Java中的String、StringBuffer和StringBuilder区别
- Java中的String、StringBuilder和StringBuffer
- String 、StringBuffer 和 StringBuilder
- String、StringBuffer和StringBuilder
- string和StringBuilder比较
- String和StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String和StringBuilder区别
- String和StringBuilder 区别
- StringBuilder和string区别
- Source not found
- Macromedia JRun 4 简明手册
- [NPWP笔记]perl函数使用文件句柄
- tinyxml的使用 转
- Windows 2003下配置Apache虚拟主机
- String中的“+”和StringBuilder
- Windows 2003下配置Apache代理Tomcat集群
- 从频繁收购看联发科未来发展策略
- IP Balance with LVS (Linux Virtual Server)
- 软件保护技术
- 网络安全与验证
- saf
- 一个信息搜集类
- 系统程序员成长计划 学习笔记(3) - 接口