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

Java 一个.toString.split(";,";)中生成了多少字符串;呼叫,java,string,stringbuilder,Java,String,Stringbuilder,假设我有以下代码: StringBuilder sb = new StringBuilder("521,214"); String[] result = sb.toString().split(","); 我的问题是:toString().split(“,”)是生成2个字符串还是3个字符串? 我知道结果字符串数组将有2个字符串-但是toString()调用也将生成一个未返回的字符串 基本上,我试图限制为性能目的创建的字符串数量,并想知道toString()调用是否将创建的字符串总数增加到3 t

假设我有以下代码:

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

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

toString().split(“,”)是生成2个字符串还是3个字符串

2和3都不是,split返回一个数组对象,数组由字符串组成是另一回事


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

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

您可以通过打印阵列随时进行测试:

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

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

这两行总共创建了五个
字符串
对象:

  • “521214”
    对象传递给
    StringBuilder
    的构造函数。此对象位于字符串的内部池中
  • ,“
    字符串对象传递给
    拆分
    。这个对象也在字符串的内部池中
  • toString
    生成的等效
    “521214”
    对象。每次调用
    toString
    都会生成一个新的
    String
    对象。并没有优化来查看以前是否请求过相同的字符串中的对象
  • 通过
    split
    方法生成的
    “521”
    “214”
    的两个
    String
    对象

不用说,将创建一个
字符串[]
数组对象来保存
“521”
“214”
split
方法返回的对象。

您可以运行代码并亲自查看它……这不会编译FirstLook以优化一个字符串,因此不值得为微小的潜在收益付出努力。1。为什么不直接使用
“521214”.split(“,”)?二,。老实说,我怀疑这个“性能问题”是您需要担心的。但是在内部,创建的字符串总数是3对吗?sb.toString()创建一个字符串,然后split返回一个包含2个字符串的数组?是的,但这是一个小的“性能问题”。当然,这不是瓶颈的原因。另外,这是我相信当你分裂成2的时候你能拥有的最少的字符串数。这个问题对我来说有点模糊。OP表示内部形成了多少个字符串。这个数字肯定会大于5,因为split方法在内部使用
String
ArrayList
。如果我错了,源代码是正确的。