.toString.split(","); 中产生了多少个字符串;称呼?

How many strings are produced in a .toString.split(","); call?

假设我有以下代码:

StringBuilder sb = new StringBuilder("521,214");
String[] result = sb.toString().split(",");

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

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

does toString().split(",") generate 2 strings or 3 strings

既不是2也不是3,拆分returns一个数组对象,数组已经由字符串组成就是另外一回事了...

如果您的问题是该数组中有多少个字符串,那么答案是:这取决于在您要拆分的原始字符串中找到多少标记 (",")...

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

您可以随时通过打印数组进行测试:

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

方法 .split() 删除 您作为分割依据的字符串。

这两行一共创建了五个String对象:

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

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