В чем разница между (char) temp и Character.toChars (temp) и String.valueOf (Character.toChars (temp)) в Java - PullRequest
0 голосов
/ 03 декабря 2010

Я получил тот же результат от них, в чем разница?что лучше?temp - это int, читается из reader.read ()

System.out.print((char)temp);

System.out.print(Character.toChars(temp));

System.out.print(String.valueOf(Character.toChars(temp)));

Ответы [ 2 ]

4 голосов
/ 03 декабря 2010

Первые два в основном одинаковы, за исключением того, что вы вызываете объект Character вместо примитивного типа данных char.Третий - просто еще один шаг, который не нужен, System.out.print в любом случае превращает ввод в читаемую строку вывода, поэтому нет необходимости анализировать символ в строку.

Первый способ -прекрасный способ сделать то, что вам нужно.

1 голос
/ 03 декабря 2010

Обычно эти три утверждения делают одно и то же.И, конечно, это тот случай, когда temp содержит символ, который вы только что прочитали, используя Reader.read(), и этот символ не был суррогатным символом UTF-16.(Будет ли это «правильным» или нет, зависит от того, поддерживает ли кодировка символов по умолчанию символ, который вы пытаетесь написать.)

Если temp содержал кодовую точку Unicode, которая была больше 65535, тогда первый оператор в конечном итоге будет искажать кодовую точку, но второй и третий операторы приведут к правильному представлению выводимого символа ... по модулю проблемы набора символов по умолчанию.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...