在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行是相同的。但似乎不一样了?
答案 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.