为什么输出在以下两个代码中都不同,因为我正在应用相同的显式类型转换。
int hex = (char)0xA;
System.out.println(hex);
int hex = 0xA;
System.out.println((char)hex);
为什么输出在以下两个代码中都不同,因为我正在应用相同的显式类型转换。
int hex = (char)0xA;
System.out.println(hex);
int hex = 0xA;
System.out.println((char)hex);
在第一行,您向函数发送一个int
值println
。在您发送 char
价值的那一刻,因此差异..
考虑System.out.println(char x)的以下重载 和 : System.out.println(int x)的重载
正如@Mortalus 回答的那样,差异的原因是因为在一种情况下您将int 传递给println,在另一种情况下您传递了一个char。
我只是想补充一点,我可以看到,在第一种情况下,您试图创建一个 char 而不是 int 但是语法不正确。代替:
int hex = (char)0xA;
采用
char hex = 0xA;
在上面的第一个语句中,文字 0xA 是十进制值 10 的 int 文字。然后显式转换为值 10 的 char。最后将 char 分配给 int 变量 hex。由于 10 对 int 和 char 都有效,因此执行隐式转换,将 char 转换回 int,最终得到一个 int 变量,而不是 char 变量。
在上面的第二个语句中,我们有相同的文字值并将其分配给一个字符。执行隐式转换,您有一个值为 10 的 char 变量 hex。
如果您对示例进行相应的更改,您将看到它们现在都打印出相同的结果。
char hex = 0xA;
System.out.println(hex);
int hex = 0xA;
System.out.println((char)hex);
[更新]
在每种情况下,这都会打印出值为 10 的字符 - 几乎每个系统都将其解释为换行符,然后是系统定义的行分隔符序列(因为 println 保证它将在输出中添加行分隔符)。
请注意,在 Windows 上,行通常由 CR LF(13 后跟 10)分隔,而在 Linux/Mac 系统上,行通常由 LF(10)分隔。
因此,在 Windows 上,这两个语句都会产生 3 个字节(10、13、10)。在 Linux/Mac 上,这两个语句都会产生两个字节 (10, 10)。
无论哪种方式,输出看起来都像几个空行。它在 Linux/Mac 上看起来不错 - 但在 Windows 上可能看起来很奇怪,因为您发送的行分隔符无效。
顺便说一句 - 我实际上并不推荐上面的代码来生成换行符。相反,您应该使用系统属性 line.separator 并改用该字符串。
String newLine = System.getProperty("line.separator").toString();