2010-12-03 2 views
0

Я получил тот же результат от них, в чем разница? что лучше? температура является INT, считанную из reader.Read()В чем разница между (char) temp и Character.toChars (temp) и String.valueOf (Character.toChars (temp)) в java

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

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

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

Что вы хотите сделать? так что мы можем сказать вам, что это лучший способ –

+0

Я просто хочу отобразить содержимое файла на экране – JayXon

ответ

1

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

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

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

4

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

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

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