字符算术 - 一元++和+ 1之间的差异

时间:2015-11-10 06:04:37

标签: java

在Java中使用短格式和长格式有什么区别?请查看以下代码:

char myChar = 'p';
myChar += 2;
myChar++;
myChar = myChar + 2;        
System.out.println(myChar);

第2行和第3行按预期工作。第4行给出错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
        Type mismatch: cannot convert from int to char

我认为第2和第4行是相同的。但似乎不一样了?

4 个答案:

答案 0 :(得分:3)

在一元形式中,隐含的是操作数的类型没有改变。

在二进制形式中,添加整数2会导致整个表达式myChar + 2的类型被提升为int,从而导致赋值回char myChar失败。

答案 1 :(得分:1)

对于

myChar += 2;

来自JLS 15.26.2

  

形式E1 op = E2的复合赋值表达式是等价的   到E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1   仅评估一次。

所以,它相当于:

myChar = (char) (myChar + 2);

至于

myChar = myChar + 2;

myChar被提升为int并添加到2。现在,您要将此值int分配给char,这会导致错误。

答案 2 :(得分:0)

E1 op= E2形式的复合赋值表达式等效于E1 = (T)((E1) op (E2)),其中T是E1的类型,但E1只被评估一次。

声明myChar+ = 2;将被隐含地转换为myChar =(char) (myChar + 2);

答案 3 :(得分:0)

这是由于自动推广。

int+char will result to int
int+double will result to double

现在,如果你试图

int +char ---> store to char
int +double ---> store to int

这会导致错误。

但如果你试试

char c='a';
c++;

等于

char c = 'a';
c = (char)(c+1);

相反,如果您使用

char c = 'a';
c = c+2;//error

因为它是

char + int ---> store to char(explained above)//error

因此写作c = c+2; 使用c = (char)(c+2); 现在这个工作原理如下.....

c+2; is basically (char + int) so the result is int(& not char)

当您执行(char)(c+2); the int value is converted to char

注意

java中char的限制是0到65535。 所以如果结果

(char)(char + int)---> store to char

溢出值然后你得到意想不到的输出。

例如

char c  = (char)65535;//valid
c++; will result as c = 0 (not 65536) due to the limit of char.