为什么Java的+ =,-=,* =,/ =复合赋值运算符不需要强制转换?
直到今天,我还以为例如: i += j; 只是以下方面的捷径: i = i + j; 但是,如果我们尝试这样做: int i = 5; long j = 8; 那么 i = i + j; 不会编译,但是 i += j; 会编译的很好。 这是否意味着实际上 i += j; 是这样的快捷方式 i = (type of i) (i + j) 吗? #1楼 在Java中,当可以将赋值操作右侧的表达式类型安全地提升为赋值左侧的变量类型时,将自动执行类型转换。 因此,我们可以安全地分配: byte -> short -> int -> long -> float -> double. 反之亦然。 例如,我们不能自动将long转换为int,因为第一个比第二个需要更多的存储空间,因此信息可能会丢失。 要强制进行这种转换,我们必须进行显式转换。 类型-转换 #2楼 有时,可以在面试中提出这样的问题。 例如,当您编写时: int a = 2; long b = 3; a = a + b; 没有自动类型转换。 在C ++中,编译上面的代码不会有任何错误,但是在Java中,您会得到类似 Incompatible type exception 。 因此,为了避免这种情况,您必须像这样编写代码: int a = 2; long b = 3; a += b;// No compilation error or