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

时间:2017-07-25 14:57:01

标签: java string stringbuilder

假设我有以下代码:

ng-click

我的问题是:StringBuilder sb = new StringBuilder("521,214"); String[] result = sb.toString().split(","); 生成2个字符串还是3个字符串? 我知道结果String数组将有2个字符串 - 但toString().split(",")调用也会生成一个字符串 - 这不会被返回?

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

3 个答案:

答案 0 :(得分:6)

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

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

不言而喻,将创建一个String[]数组对象来保存从"521"方法返回的"214"split个对象。

答案 1 :(得分:1)

  

做toString()。split(“,”)生成2个字符串或3个字符串

既不是2也不是3,split返回一个数组对象,该数组是由字符串组成的另一个故事......

如果您的问题是该数组中有多少个字符串,那么答案是:它取决于您要分割的原始字符串中有多少个tockens(“,”)......

答案 2 :(得分:1)

它将创建一个包含2个字符串的String数组。

您可以随时打印出数组来测试:

StringBuilder sb = new StringBuilder("521,214");
String[] result = sb.toString().split(",");
for(String s : result)
    System.out.println(s);

方法.split()删除您要拆分的字符串。