我从这些得到了相同的结果,有什么区别?哪个更好? temp是一个int,从reader.read()
读取System.out.print((char)temp);
System.out.print(Character.toChars(temp));
System.out.print(String.valueOf(Character.toChars(temp)));
答案 0 :(得分:4)
除了调用Character对象而不是原始数据类型char之外,前两个基本相同。第三个是另一个不需要的步骤,System.out.print无论如何都将输入转换为可读的输出字符串,因此不需要将char解析为字符串。
第一种方式是做你需要做的完美的方式。
答案 1 :(得分:1)
通常,这三个陈述都是一样的。当然,如果temp
包含您刚刚使用Reader.read()
读取的字符并且该字符不是UTF-16代理字符,则会出现这种情况。 (这是否与“正确”的关系取决于默认字符编码是否支持您尝试编写的字符。)
如果temp
包含的Unicode代码点大于65535
,则第一个语句最终会破坏代码点,但第二个和第三个语句将导致正确表示该字符output ... modulo默认字符集问题。
如果temp
包含UTF-16代理字符,那么我不太确定会发生什么。我怀疑它会起作用。但是,对PrintStream.print(char)
的javadoc的字面读取开启了即使是UTF-16到UTF-8转换也可能将单个代理字符视为错误的可能性。但是,除非您的Reader正在读取包含大于65535
的Unicode代码点的流,否则这没有实际意义。