Java 为什么在十六进制整数到字符的转换中输出不同?

Java 为什么在十六进制整数到字符的转换中输出不同?,java,Java,既然我应用了相同的显式类型转换,为什么以下两个代码中的输出都不同 int hex = (char)0xA; System.out.println(hex); int hex = 0xA; System.out.println((char)hex); 在第一行,您向println函数发送int值。 在第二次发送char值时,会出现差异 请考虑以下重载 还有一个重载:正如@verternus所回答的,造成差异的原因是,在一种情况下,您向println传递了一个in

既然我应用了相同的显式类型转换,为什么以下两个代码中的输出都不同

    int hex = (char)0xA;
    System.out.println(hex);

    int hex = 0xA;
    System.out.println((char)hex);

在第一行,您向
println
函数发送
int
值。 在第二次发送
char
值时,会出现差异

请考虑以下重载
还有一个重载:

正如@verternus所回答的,造成差异的原因是,在一种情况下,您向println传递了一个int,在另一种情况下,您传递了一个char

我只是想补充一点,我可以看到在第一种情况下,您试图创建一个char而不是int,但是语法不正确。而不是:

int hex = (char)0xA;
使用

在上面的第一条语句中,文本0xA是十进制值为10的int文本。然后显式强制转换为值为10的字符。最后,将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上可能看起来很奇怪,因为您发送的行分隔符无效

顺便说一句,我并不推荐上面的代码来生成换行符。相反,您应该使用系统属性行.separator并使用该字符串

String newLine = System.getProperty("line.separator").toString();

在第一行之后,两个程序是相同的。但是在第二行中,演员的角色不同。谢谢你的详细解释。。你能告诉我运行System.out.println((char)hex)时打印的输出是什么吗;
String newLine = System.getProperty("line.separator").toString();