Java和char之间的Java隐式转换

Lac*_*say 5 java ascii casting type-conversion

在处理以下场景时,我正在寻找Java的行为解释.据我所知,ASCII表的排列方式使得字符的值5大于5个位置0.这允许在char上进行计算而不转换为int,如第一个例子中所示.

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

int x = '5' - '0';
Run Code Online (Sandbox Code Playgroud)

产量 x = 5;

int x = '5'
Run Code Online (Sandbox Code Playgroud)

产量 x = 53;

现在举一些例子,这引起了混乱.

int x = '0' + 1 - '5'
Run Code Online (Sandbox Code Playgroud)

产量 x = -4

int y = '5' - '0' + '1'
Run Code Online (Sandbox Code Playgroud)

产量 54

int y = '5' - 0 + '1'
Run Code Online (Sandbox Code Playgroud)

产量 102

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

use*_*900 5

只需将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
Run Code Online (Sandbox Code Playgroud)

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