为什么输出在以下两个代码中都有所不同,因为我应用了相同的显式类型转换。
int hex = (char)0xA;
System.out.println(hex);
int hex = 0xA;
System.out.println((char)hex);
答案 0 :(得分:2)
在第一行,您向int
函数发送println
值。
在第二个你发送char
值因此差异..
考虑System.out.println(char x)的以下重载 以及:System.out.println(int x)
的重载答案 1 :(得分:0)
正如@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变量。
在上面的第二个语句中,我们具有相同的文字值并将其分配给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上可能看起来很奇怪,因为你发送了一个无效的行分隔符。
BTW - 我实际上并不建议使用上面的代码来生成换行符。相反,您应该使用系统属性line.separator并使用该字符串。
String newLine = System.getProperty("line.separator").toString();