java中(char)temp和Character.toChars(temp)和String.valueOf(Character.toChars(temp))之间的区别是什么

时间:2010-12-03 06:28:22

标签: java string char character

我从这些得到了相同的结果,有什么区别?哪个更好? temp是一个int,从reader.read()

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

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

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

2 个答案:

答案 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代码点的流,否则这没有实际意义。