int和char之间的Java隐式转换

在处理以下场景时,我正在寻找对 Java 行为的解释。我了解 ASCII 表的排列方式使字符的值50. 这允许在 char 上完成计算,而无需转换为第一个示例中看到的 int。

我不明白为什么 Java 似乎不一致地处理何时提供 ASCII 表中的值以及何时对字符进行计算,就好像它们是整数一样。

int x = '5' - '0';

输出x = 5;

int x = '5'

输出x = 53;

现在举一些例子,这会引起混乱。

int x = '0' + 1 - '5'

输出x = -4

int y = '5' - '0' + '1'

输出54

int y = '5' - 0 + '1'

输出102

Java 似乎在进行隐式类型转换,但是 Java 是如何推断它应该使用 int/char 的哪种表示形式的呢?


皈依舞
浏览 161回答 3
3回答

芜湖不芜

只需将 char 转换为 ASCII 代码(在您的语句下方)int x = '0' + 1 - '5'        48  + 1 - 53 = -4 int y = '5' - 0 + '1'         53 - 0 + 49 = 102int y = '5' - '0' + '1'         53 - 48  + 49 = 54注意它是一致的,每个 int 保持 int 并且每个 char 都转换为 ASCII 码

qq_遁去的一_1

char '0'不等于int 0。char '0'的二进制表示占用 16 位:0000 0000 0011 0000whileint 0的二进制表示占用 32 位:0000 0000 0000 0000 0000 0000 0000 0000当您将 achar和 an相加时int,char将提升为int第一个。例如。char5的unicode是0035,在 binary 中0000 0000 0011 0101,它会通过在头部插入 16 个零来提升为 int 0000 0000 0000 0000 0000 0000 0011 0101,而 int53用十进制表示。

慕容708150

您可能正在混合值中的表示。这些值永远不会改变,因此当您执行算术运算时,它将始终是 '5'==53 而不是 5。对于在原语到字符串转换上显示 JLS。对于大多数计算,整数算术被提升为 int。System.out.println('5' + '0');>>> 101System.out.println((char)('5' + '0'));>>> e两个结果具有相同的数值,但其中一个显示为字符,因为它已转换为字符。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java