Java 执行可变类型a+时的奇怪类型转换=可变类型

Java 执行可变类型a+时的奇怪类型转换=可变类型,java,casting,type-conversion,Java,Casting,Type Conversion,我正在使用Java,而且是新手 当我尝试 int integerValue = 100; long longValue = 100; integerValue = integerValue + longValue; 我得到“类型不匹配:无法从long转换为int” 但是 工作很好,这意味着它正在为我做演员:) 它是“+=”固有地提供的东西吗?有什么具体原因吗 编辑:哦!!太常见的问题了!:)我应该先彻底搜查,我的坏 是的,这正是我们所解释的 形式为E1 op=E2的复合赋值表达式等价于E1=(

我正在使用Java,而且是新手

当我尝试

int integerValue = 100;
long longValue = 100;
integerValue = integerValue + longValue;
我得到“类型不匹配:无法从long转换为int”

但是

工作很好,这意味着它正在为我做演员:)

它是“+=”固有地提供的东西吗?有什么具体原因吗


编辑:哦!!太常见的问题了!:)我应该先彻底搜查,我的坏

是的,这正是我们所解释的

形式为
E1 op=E2
的复合赋值表达式等价于
E1=(T)((E1)op(E2))
,其中
T
E1
的类型,除了
E1
仅计算一次之外


使用操作赋值运算符,存在隐式强制转换

int i = 10;
i *= 5.5;
// same as
i *= (int) (i * 5.5);
甚至

char ch = '5';
ch /= 1.1; // ch = '0'

没错。在第一个示例中,必须强制转换为
int
,因为左侧表达式的结果是
long
值(仅因为
longValue
long

+=
运算符执行(相同的)强制转换隐式


这两种行为都在Java语言规范中指定

您已经从中发现了Tweedledum难题。 基本上,复合赋值执行类型转换,而常规赋值不执行。有关详细信息,请参阅。

谢谢大家

所有的答案都很好

更好的解释和示例可在以下位置获得:)

复制可能的副本
char ch = '5';
ch /= 1.1; // ch = '0'
 integerValue = (long) (integerValue + longValue);  // this works