2015-03-21 3 views
2

Предположим, что int b = 99. Почему system.out.write(b) напечатать «c» вместо 99? В то же время, используя PrintWriter, я получаю фактическое значение b (99), даже если b = 'c'?Почему system.out.write конвертирует значение int в char?

+6

Потому что вы путаете 'write' и' print', вероятно. – immibis

+0

На самом деле System.out.write (b) ничего не делает, если вы не вызвали System.out.flush() –

ответ

3

Пусть ИНТ б = 99. Почему system.out.write (б) печать "с"

because U0063 is "c"

и

99 = 0x63

+2

Я думаю, что OP нужно сообщить, что ['write()'] (http://docs.oracle .com/javase/7/docs/api/java/io/PrintStream.html # write (int)) на самом деле делает – TheLostMind

1

Оба выхода 'c' точно такие же, как и следовало ожидать. System.out.write и PrintWriter.write как выходной тот же результат ... 'с'

int b = 99; 
    System.out.write(b); 
    System.out.flush(); 
    System.out.println(""); 
    PrintWriter x = new PrintWriter(System.out); 
    x.write(b); 
    x.flush(); 

выходы

с

с

Посмотрите на номер 99 на этой диаграмме http://www.asciitable.com/

Вот что говорится в документации к способу System.out.write

Обратите внимание, что байт записан как заданный; для записи символа, который будет преобразован в в соответствии с кодировкой символов по умолчанию платформы, использует методы print (char) или println (char).

PrintWriter имеет перегруженный метод передачи строки. Но в этом случае, когда вы передаете число, которое оно преобразует в char.

Записывает один символ. Переопределения: write (...) в Writer Параметры: c int, указывающий символ, который нужно записать.

Возможно, проблема заключается в том, что вы используете метод println для PrintWriter, но не для System.out, просто используйте метод println в System.out, и вы получите те же результаты. Это связано с тем, что вы используете перегруженный конструктор, который принимает и печатает целое число, но для записи метод принимает число и преобразует его в char, для чего он нужен.

3

Вещь System.out.write(int) будет рассматривать аргумент как байт и будет записывать его в поток.

В вашем случае, так как вы прошли 99 который U0063, следовательно c печатается.

+0

Но это поток байтов. Почему он не печатает только значение байта? –

Смежные вопросы