>不能从int转换为char。 一个+ = B
这个问题在这里已经有了答案:
答案在于二进制数字提升。 所有操作数都被提升为更宽操作数的类型,并且至少达到int
。 这由JLS的第5.6.2节描述:
2.扩展原始转换(§5.1.2)用于转换以下规则中指定的一个或两个操作数:
如果其中一个操作数是double类型,另一个操作数转换为double。
否则,如果任一操作数的类型为float,则另一个操作数转换为float。
否则,如果任一操作数的类型为long,则另一个操作数转换为long。
否则, 两个操作数都转换为int类型 。
(强调我的)
因此char
( checkSum
)加上一个char
( charNum[i]
)是一个int
。
它比你想象的更简单:)。
如果你添加两个char
,它会创建int
。 总是。
而且你在一些事情上是不正确的: array of char
的单元格的值是char
,而不是引用,因此charNum[i]
是char
,它只有2个字节宽度。