为什么我不能写ch = ch + 1; 而不是ch ++; 虽然他们有相同的意思

Tus*_*Mia 7 java integer increment char

package practicejava;

public class Query {

    public static void main(String[] args) {
        char ch = 66;
        System.out.println("character= " + ch);

        ch++;

        System.out.println("character = " + ch);

    }
}
Run Code Online (Sandbox Code Playgroud)

从技术上讲ch++;,它ch=ch+1;是相同的,但为什么我写作时会出现错误ch=ch+1;而不是ch++;

Nic*_*s K 6

你需要提供演员才能做到这一点:

ch = (char) (ch + 1);
Run Code Online (Sandbox Code Playgroud)

这是因为表达式ch + 1被提升(upcast)为int.为了将此表达式重新分配给a,char您需要明确地向下转换它.


孙兴斌*_*孙兴斌 5

通过ch+1,char ch将被提升到int第一,就像((int)ch) + 1,所以结果将是一个int.

当您尝试将int(32位)分配回char(16位)时,可能会丢失准确性,您需要明确地执行此操作ch = (char)(ch + 1);


这称为二进制数字促销:

对某些运算符的操作数执行二进制数字提升:

...

数值类型的加法和减法运算符+和 - (§15.18.2)

它会表演

应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:

如果任一操作数的类型为double,则另一个操作数转换为double.

否则,如果任一操作数的类型为float,则另一个操作数转换为float.

否则,如果任一操作数的类型为long,则另一个操作数转换为long.

否则,两个操作数都将转换为int类型.