Java 字符加法(char1 = char2 + 10)

fra*_*nge 0 java

为什么我不能这样做?

public class test123 {
    public static void main (String [] args) {
        char c = 34;
        char a = c + 10;

    }
}
Run Code Online (Sandbox Code Playgroud)

java新手,如果这个问题实际上很愚蠢,我很抱歉。

And*_*ner 7

当您添加数字时,它们会经历二进制数字提升。也就是说,操作数被加宽以允许它们相加。

当您将 a 添加char到 an时int, thechar会扩展为 an int,结果是 an int

因此,您必须将intback 转换为char

char a = (char) (c + 10);
Run Code Online (Sandbox Code Playgroud)

然而,即使将 a 添加char到另一个char,两者都会扩展为int,并且结果再次是 an int,因此不能分配给char变量。规则基本上是:

  • 如果任一操作数是双精度型,则将两者扩展为双精度型
  • 否则,如果任一操作数是浮点型,则将两者扩展为浮点型
  • 否则,如果任一操作数为 long,则将两者扩大为 long
  • 否则,将两者扩大为 int

因此,即使您将 a 添加byte到 a byte,两者都会扩展为int,相加,结果是一个int


例外情况是如果您做了c final

final char c = 34;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,c具有编译时常量值,c + 10编译时常量表达式也是如此。char因为它是一个编译时常量表达式,所以编译器知道它的值,并且知道它适合;的范围。所以这是允许的:

final char c = 34;
char a = c + 10;
Run Code Online (Sandbox Code Playgroud)

  • @h0r53 `10` 是一个编译时常量表达式,其值可以由编译器确定以适合 `char` 的范围。我已经证明,您可以将加法结果分配给“char”,前提是它具有编译时常量值。 (2认同)

归档时间:

查看次数:

128 次

最近记录:

4 年,2 月 前