Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 移动类型字符时,类似的赋值行为不同_Java_Type Mismatch_Compound Assignment - Fatal编程技术网

Java 移动类型字符时,类似的赋值行为不同

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=

嗨,我有一段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=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。请参阅。