Java 移动类型字符时,类似的赋值行为不同
嗨,我有一段Java代码,它将一个字符移位2,如下所示Java 移动类型字符时,类似的赋值行为不同,java,type-mismatch,compound-assignment,Java,Type Mismatch,Compound Assignment,嗨,我有一段Java代码,它将一个字符移位2,如下所示 char ch = 'A'; ch += 2; System.out.println(ch); 本例中的输出为“C”(如预期)。但是如果我像这样重写代码: char ch = 'A'; ch = ch + 2; System.out.println(ch); 我得到一个编译错误“类型不匹配:无法从int转换为char”。为什么会发生这种情况,这两种分配不是相等的吗?人们普遍错误地认为X+=Y与X=X+Y相同。发件人: 形式为E1 op=
char ch = 'A';
ch += 2;
System.out.println(ch);
本例中的输出为“C”(如预期)。但是如果我像这样重写代码:
char ch = 'A';
ch = ch + 2;
System.out.println(ch);
我得到一个编译错误“类型不匹配:无法从int转换为char”。为什么会发生这种情况,这两种分配不是相等的吗?人们普遍错误地认为
X+=Y
与X=X+Y
相同。发件人:
形式为E1 op=E2
的复合赋值表达式等价于E1=(T)((E1)op(E2))
,其中T
是E1
的类型,除了E1
仅计算一次之外
请注意,其中涉及隐式强制转换。现在,当您有类似于:
ch = ch + 2; // no cast, error
右侧的类型为int
,而左侧的类型为char
,因此赋值的两侧之间存在类型不匹配,因此出现错误。这可以通过显式强制转换来解决:
ch = (char) (ch + 2); // cast, no error
人们普遍错误地认为
X+=Y
与X=X+Y
相同。发件人:
形式为E1 op=E2
的复合赋值表达式等价于E1=(T)((E1)op(E2))
,其中T
是E1
的类型,除了E1
仅计算一次之外
请注意,其中涉及隐式强制转换。现在,当您有类似于:
ch = ch + 2; // no cast, error
右侧的类型为int
,而左侧的类型为char
,因此赋值的两侧之间存在类型不匹配,因此出现错误。这可以通过显式强制转换来解决:
ch = (char) (ch + 2); // cast, no error
谢谢你的回答,你知道为什么
ch=ch+(char)2
也不起作用?@area5one,因为添加两个字符的结果也是一个int。请参阅。感谢您的回答,您知道为什么ch=ch+(char)2代码>也不起作用?@area5one,因为添加两个字符的结果也是一个int。请参阅。