String [] s = str.split(“,”)的CPU使用率

时间:2016-11-23 10:01:00

标签: java

这是我的代码:

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]

1 个答案:

答案 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参数指定   子阵列的长度。 复制子阵列的内容;   后续修改字符数组不会影响   新创建的字符串。