与纯字符串连接相比,使用字符串生成器有什么好处和权衡?
new StringBuilder(32).append(str1)
.append(" test: ")
.append(val)
.append(" is changed")
.toString();
vs say
str1 + " test: " + val + " is changed".
str1
是一个随机的 10 个字符的字符串。str2
是一个随机的 8 个字符的字符串。
在您的特定示例中,没有,因为编译器内部使用StringBuilder
s 进行字符串连接。但是,如果串联发生在循环中,编译器可能会创建多个StringBuilder
and String
对象。例如:
String s= "" ;
for(int i= 0 ; i < 10 ; i++ )
s+= "a" ;
每次执行上面的第 3 行时,都会生成一个新的StringBuilder
对象被创建,其内容s
附加,附加“a”,然后StringBuilder
被转换为要分配回的字符串s
。共10个StringBuilder
s 和 10String
s.
相反,在
StringBuilder sb= new StringBuilder() ;
for(int i= 0 ; i < 10 ; i++ )
sb.append( "a" );
String s= sb.toString() ;
Only 1 StringBuilder
and 1 String
被创建。
其主要原因是编译器不够聪明,无法理解第一个循环与第二个循环等效并生成更有效的(字节)代码。在更复杂的情况下,即使是最聪明的编译器也不可能知道。如果您绝对需要此优化,则必须使用以下命令手动引入它StringBuilder
明确地。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)