这是我的代码:
String[] s = str.split(",")
但是,通过jstack
文件,我发现代码的使用率非常高。
java.lang.Thread.State: RUNNABLE
at java.util.Arrays.copyOfRange(Arrays.java:3664)
at java.lang.String.<init>(String.java:207)
at java.lang.String.substring(String.java:1969)
at java.lang.String.split(String.java:2353)
at java.lang.String.split(String.java:2422)
为什么代码需要Arrays.copyOfRange
?我应该首先定义String[length]
?
答案 0 :(得分:2)
为什么代码需要
Arrays.copyOfRange
?
由于split
内部调用了String
,而substring(int beginIndex, int endIndex)
是不可变,new String(char value[], int offset, int count)
会创建新的String
,它会提供所提供的char
array
的安全副本,以避免受到任何外部修改的影响,否则您的String
实例将具有潜在的可变性,这是我们想要避免的。 / p>
检查String(char value[], int offset, int count)
的javadoc:
分配一个新的
String
,其中包含来自子数组的字符 字符数组参数。 offset参数是的索引 子数组的第一个字符和count参数指定 子阵列的长度。 复制子阵列的内容; 后续修改字符数组不会影响 新创建的字符串。