小新 的 BLOG
            
            -=java、Web编程=-

原来以前一直想错了

以前经常看一些优化的文章,一直以为+在String之间的累加扮演着罪恶的角色以为"111" + "222"累加都会创建一个StringBuffer,其实不然,只有在累加的中间有变量的时候才会创建一个StringBuffer,字符串常量之间的累加并不会创建一个StringBuffer,字符串常量之间的累加不用大惊小怪的

---------------
public String toString1() {
return "111" + "222" + "333" ;
}
转化成字节码是
public toString1() : String
L0 (0)
LDC "111222333"
ARETURN
L1 (3)
---------------
public String toString1() {
return "111" + "222" + "333" + this.s1;
}
转化成字节码是
public toString1() : String
L0 (0)
NEW StringBuffer
DUP
LDC "111222333"
INVOKESPECIAL StringBuffer.<init>(String) : void
ALOAD 0: this
GETFIELD T.s1 : String
INVOKEVIRTUAL StringBuffer.append(String) : StringBuffer
INVOKEVIRTUAL StringBuffer.toString() : String
ARETURN
L1 (10)
-------------------
如果用一个String变量在一个循环里使用+累加字符串,每次循环就会重新创建一个StringBuffer,效率就会耕地了
标签集:TAGS:
回复Comments()点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}
  用户登录
用户名
密 码
选 项:
 
  我的日历
  分类日志
  访问计数
  获取 RSS
bluelover 最新的 20 条日志
  最新评论
  友情链接
  联系我
                  GMail:bluelover@gmail.com
MSN:xini_huang@hotmail.com
QQ:85364603
Modified by blueloverPowered by 5DBlog.com