为了账号安全,请及时绑定邮箱和手机立即绑定

int和char之间的Java隐式转换

int和char之间的Java隐式转换

皈依舞 2022-05-25 10:16:52
在处理以下场景时,我正在寻找对 Java 行为的解释。我了解 ASCII 表的排列方式使字符的值5比0. 这允许在 char 上完成计算,而无需转换为第一个示例中看到的 int。我不明白为什么 Java 似乎不一致地处理何时提供 ASCII 表中的值以及何时对字符进行计算,就好像它们是整数一样。int x = '5' - '0';输出x = 5;int x = '5'输出x = 53;现在举一些例子,这会引起混乱。int x = '0' + 1 - '5'输出x = -4int y = '5' - '0' + '1'输出54int y = '5' - 0 + '1'输出102Java 似乎在进行隐式类型转换,但是 Java 是如何推断它应该使用 int/char 的哪种表示形式的呢?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

只需将 char 转换为 ASCII 代码(在您的语句下方)


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

        48  + 1 - 53 = -4 


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

         53 - 0 + 49 = 102


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

         53 - 48  + 49 = 54

注意它是一致的,每个 int 保持 int 并且每个 char 都转换为 ASCII 码


查看完整回答
反对 回复 2022-05-25
?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

char '0'不等于int 0char '0'的二进制表示占用 16 位:

0000 0000 0011 0000

whileint 0的二进制表示占用 32 位:

0000 0000 0000 0000 0000 0000 0000 0000

当您将 achar和 an相加时intchar将提升为int第一个。

例如。char5unicode0035,在 binary 中0000 0000 0011 0101,它会通过在头部插入 16 个零来提升为 int 0000 0000 0000 0000 0000 0000 0011 0101,而 int53用十进制表示。


查看完整回答
反对 回复 2022-05-25
?
慕容708150

TA贡献1831条经验 获得超4个赞

您可能正在混合值中的表示。这些值永远不会改变,因此当您执行算术运算时,它将始终是 '5'==53 而不是 5。对于在原语到字符串转换上显示 JLS。


对于大多数计算,整数算术被提升为 int。


System.out.println('5' + '0');

>>> 101


System.out.println((char)('5' + '0'));

>>> e

两个结果具有相同的数值,但其中一个显示为字符,因为它已转换为字符。


查看完整回答
反对 回复 2022-05-25
  • 3 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号