private static
final char[] EMPTY_CHAR_ARRAY =
new char[0];
private static final
char[] ONE = "1".toCharArray(); //$NON-NLS-1$
The problem with char[] is that it's generally a less efficient one for
storage than the underlying String model is, and in any case, you end up with
the String being backed by a similar array in the first place (which is then
interned).
Consider the following class:
public class Test {
public static final char[] foo = "1".toCharArray();
// public static final char[] foo = {'1'};
// public static final String foo = "1";
}
If I compile this (Mac OS X with Java 6) I get the following sizes of
class file generated:
char with toCharArray = 329b
char with in-line array = 272b
String = 248b
What I can't understand is why we have the string "1" (which will take up
space in the Class' intern pool) and then taking up more space than if we'd
just used the string on its own.
There's probably a reason, but one that isn't immediately obvious to me.
Perhaps someone could enlighten me? It's probably all related to the fact that
Token has a char[] getCharImage(), but that in itself just lends the question
to 'why doesn't that return a String ...'
Alex