2006/03/19 | 原来以前一直想错了
类别(我的文档[原创]) | 评论(2) | 阅读(53) | 发表于 12:03
以前经常看一些优化的文章,一直以为+在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,效率就会耕地了
0

评论Comments