Java 执行可变类型a+时的奇怪类型转换=可变类型
我正在使用Java,而且是新手 当我尝试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=(
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