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
。如果我错了,源代码是正确的。