CharSequence и конвертация строк при выводе в консоль
Я новичок в Java и решал одну задачу по реализации интерфейсов. Вот во время решения одной из задач возник вопрос.
Каким образом происходит конвертация последовательности байтов в строку при вызове метода System.out.println?
В конструкторе мы не конверитируем байты в строку. Так каким образом вызов метода System.out.println(answer) выводит в консоль строку Hello!, а не массив байтов {72, 101, 108, 108, 111, 33}?
Я так понимаю, что где-то неявно вызывается метод toString.
class AsciiCharSequence implements CharSequence {
final private byte[] bytes;
AsciiCharSequence(byte[] bytes) {
this.bytes = bytes.clone();
}
public String toString() {
return new String(bytes);
}
@Override
public int length() {
return bytes.length;
}
@Override
public char charAt(int i) {
return (char) bytes[i];
}
@Override
public CharSequence subSequence(int start, int end) {
byte[] temp = new byte[end - start];
for (int i = start, j = 0; i < end; i++) {
temp[j++] = bytes[i];
}
System.out.println(temp);
return new AsciiCharSequence(temp);
}
}
public class Main {
public static void main(String[] args) {
byte[] example = {72, 101, 108, 108, 111, 33};
AsciiCharSequence answer = new AsciiCharSequence(example);
System.out.println(answer);
}
}
Ответы (1 шт):
Автор решения: Galiev Mansur
→ Ссылка
Да, в методе println объект конвертируется в строку:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}