Как 4Castle предположить, причину что
System.out.println(...);
не только один метод, но вместо того, чтобы много много различных методов, принимая различные параметры
Это известно в Java, как метод перегрузки
За исходный код:
Println зовёт печати
печати звонит записи
Если write(..)
использует char[]
то NPE происходит потому, что код пытается (среди других), чтобы получить длину массива, который нуль ссылается
private void write(char buf[]) {
try {
synchronized (this) {
ensureOpen();
textOut.write(buf);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush) {
for (int i = 0; i < buf.length; i++)
if (buf[i] == '\n')
out.flush();
}
}
}
С другой стороны, печатая int[]
будет в конечном итоге в вызывной println(Object x)
где String.valueOf
вызывается
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
и как вы можете видеть
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
valueOf(null)
возвращает нуля :)
Вопрос –
'println' перегружен для' char [] ', поэтому он ведет себя по-другому. – 4castle
Пожалуйста, объясните в деталях. –