Обычно эти три утверждения делают одно и то же.И, конечно, это тот случай, когда temp
содержит символ, который вы только что прочитали, используя Reader.read()
, и этот символ не был суррогатным символом UTF-16.(Будет ли это «правильным» или нет, зависит от того, поддерживает ли кодировка символов по умолчанию символ, который вы пытаетесь написать.)
Если temp
содержал кодовую точку Unicode, которая была больше 65535
, тогда первый оператор в конечном итоге будет искажать кодовую точку, но второй и третий операторы приведут к правильному представлению выводимого символа ... по модулю проблемы набора символов по умолчанию.
Если содержится temp
суррогатный персонаж UTF-16, тогда я не совсем уверен, что произойдет.Я подозреваю, что это будет работать.Однако буквальное чтение javadoc для PrintStream.print(char)
оставляет открытой возможность того, что даже преобразование UTF-16 в UTF-8 может рассматривать один суррогатный символ как ошибку.Однако это спорный вопрос, если только ваш Reader не читал как поток, включающий кодовые точки Unicode больше 65535
.