在.toString.split(",")中生成了多少个字符串; 呼叫?

Len*_*des -3 java string stringbuilder

假设我有以下代码:

StringBuilder sb = new StringBuilder("521,214");
String[] result = sb.toString().split(",");
Run Code Online (Sandbox Code Playgroud)

我的问题是:确实toString().split(",")生成2个字符串或3个字符串?我知道结果String数组将有2个字符串 - 但toString()调用也会生成一个字符串 - 不返回?

基本上,我试图限制为性能目的而创建的字符串数量,并想知道toString()调用是否将创建的字符串总数增加到3?

das*_*ght 6

String这两行总共会创建五个对象:

  • "521,214"对象传递给了StringBuilder构造函数.该对象位于实习字符串池中,
  • ","传递给的String对象split.该对象也在实习字符串池中,
  • "521,214"由...产生的等效对象toString.每次调用都会toString产生一个新String对象.没有优化来查看之前是否已请求相同的字符串对象.
  • 由该方法生成和生成的两个String对象"521""214"split

毫无疑问,String[]将创建一个数组对象来保存"521""214"从该split方法返回的对象.

  • 这个问题对我来说有点模糊.OP说*内部形成了多少个字符串*.这个数字肯定会大于5,因为split方法在内部使用`String`的`ArrayList`.源代码是[这里](http://hg.openjdk.java.net/jdk7u/jdk7u6/jdk/file/8c2c5d63a17e/src/share/classes/java/lang/String.java)纠正我,如果我是错误. (2认同)