I am trying to understand the implementation of Integer.toString(), which looks like this:
public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return "-2147483648";
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(0, size, buf);
}
And I ran into the last line, which doesn't look like any of the constructors in the String class, except this one:
String(char value[], int offset, int count)
...except that this function is called with the char[] argument first, unlike how it is being used in Integer.toString(). I was under the impression that changing the order of arguments counted as a change in the signature of the method, and would be a different overwrite of the method.
Why does this work, or am I interpreting this incorrectly?
That's using a package-private String
constructor. It doesn't show up in the String
Javadoc, because it's package-private.
If you check the String
source code on the same site, you'll see
644 // Package private constructor which shares value array for speed.
645 String(int offset, int count, char value[]) {
646 this.value = value;
647 this.offset = offset;
648 this.count = count;
649 }