Split does not create brand new strings, it uses substring internally which creates a new String object that points to the right substring of the original string, without copying the underlying char[].
So apart from the (slight) overhead of object creation, it should not have a huge impact from a memory perspective.
ps: StringTokenizer uses the same technique so it would probably yield the same results as split.
EDIT
To see that it is the case, you can use the sample code below. It splits abc,def into abc and def then prints the underlying char[] of the original string and of the split strings - the output shows that they are all the same.
Output:
Reference: [C@3590ed52 Content: [a, b, c, ,, d, e, f]
Reference: [C@3590ed52 Content: [a, b, c, ,, d, e, f]
Reference: [C@3590ed52 Content: [a, b, c, ,, d, e, f]
Code:
public static void main(String[] args) throws InterruptedException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
String s = "abc,def";
String[] ss = s.split(",");
Field f = String.class.getDeclaredField("value");
f.setAccessible(true);
System.out.println("Reference: " + f.get(s) + "\tContent: " + Arrays.toString((char[])f.get(s)));
System.out.println("Reference: " + f.get(ss[0]) + "\tContent: " + Arrays.toString((char[])f.get(ss[0])));
System.out.println("Reference: " + f.get(ss[1]) + "\tContent: " + Arrays.toString((char[])f.get(ss[1])));
}