繁体   English   中英

为什么输出在十六进制整数到字符转换方面有所不同?

[英]Why the output getting differed in hexadecimal integer to character conversion?

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

    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变量。

在上面的第二个语句中,我们具有相同的文字值并将其分配给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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM