而且把注意力放在stringbuilder 本来就是错误方向,因为你无法保证java编译器是否会stringbuilder进行优化编译。
在已知的主流 Javac 中(包括ecj),每行的+的确都会产生一个新的StringBuilder,所有你说>6是正确。因为一共有十个对象产生,8个被回收,
但是,由于java language specifation 没有要求这个是必然的转换。
那么就不能保证所有的所有的编译器都会进行同样的转换和产生相同数目的StringBuilder,只能按原题的本来面目就是有中间多少必然会产生的string才是是直接正确的问题和答案,所以我一直只说有两个没回收是重点
所以这个问题我一直都在说是问的不好。因为在开发者的角度,是否和如何使用StringBuilder做字符串合拼的优化应该是JVM和javac要去处理的改进,不是java本身程序员要做的。
在已知的主流 Javac 中(包括ecj),每行的+的确都会产生一个新的StringBuilder,所有你说>6是正确。因为一共有十个对象产生,8个被回收,
但是,由于java language specifation 没有要求这个是必然的转换。
那么就不能保证所有的所有的编译器都会进行同样的转换和产生相同数目的StringBuilder,只能按原题的本来面目就是有中间多少必然会产生的string才是是直接正确的问题和答案,所以我一直只说有两个没回收是重点
所以这个问题我一直都在说是问的不好。因为在开发者的角度,是否和如何使用StringBuilder做字符串合拼的优化应该是JVM和javac要去处理的改进,不是java本身程序员要做的。