2016-11-23 1 views
1

Hier ist mein Code:Cpu Verwendung von String [] s = str.split ("")

String[] s = str.split(",") 

Aber durch die jstack Datei, ich finde die Verwendung des Codes sehr hoch ist.

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) 

Warum der Code Arrays.copyOfRange müssen? Sollte ich Definition String[length] zuerst?

+0

haben Sie den Code angesehen? http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/java/lang/String.java#String.split%28java.lang.String%2Cint%29 –

+4

* "Ich finde die Verwendung des Codes ist sehr hoch." * im Vergleich zu was? Ist das wirklich der Flaschenhals Ihrer Anwendung? – UnholySheep

+0

Wenn Sie an einer IDE wie Eclipse oder Netbean arbeiten, können Sie in die String-Klasse springen, um zu sehen, warum 'split' die'Arrays.copyOfRange' aufruft. Es ist einfach normal. –

Antwort

2

Warum muss der Code Arrays.copyOfRange?

Da split schafft neue String s dank substring(int beginIndex, int endIndex), die intern new String(char value[], int offset, int count) nennt, und als ein Stringunveränderlich ist, hat es eine sichere Kopie der bereitgestellten chararray zu vermeiden, da sonst durch äußere Modifikationen betroffen Ihre String Instanz wäre dann potentiell veränderbar, was wir vermeiden wollen.

Prüfen der Javadoc- von String(char value[], int offset, int count):

weist eine neue String, die Zeichen von einem Subarray des Zeichenarray Argument enthält. Das Offset-Argument ist der Index des ersten Zeichens des Subarrays, und das Argument count gibt die Länge des Subarrays an. Der Inhalt des Subarrays wird kopiert; nachfolgende Änderung des Zeichenarrays hat keinen Einfluss auf die neu erstellte Zeichenfolge .

Verwandte Themen