直到今天,我还以为:
i += j;
Run Code Online (Sandbox Code Playgroud)
只是一个捷径:
i = i + j;
Run Code Online (Sandbox Code Playgroud)
但是如果我们试试这个:
int i = 5;
long j = 8;
Run Code Online (Sandbox Code Playgroud)
然后i = i + j;将不会编译但i += j;将编译正常.
这是否意味着事实上i += j;是这样的捷径
i = (type of i) (i + j)?
java casting operators variable-assignment assignment-operator
我最近了解到,在将一些Java代码转换为C#时,Java的增量运算符'+ ='隐式转换为LHS的类型:
int i = 5;
long lng = 0xffffffffffffL; //larger than Int.MAX_VALUE
i += lng; //allowed by Java (i==4), rejected by C#
Run Code Online (Sandbox Code Playgroud)
相当于:( 详情请点击此处)
int i = 0;
long lng = 0xffffffffffffL;
i = (int)(i + lng);
Run Code Online (Sandbox Code Playgroud)
因此默默地造成了失去规模的机会.
C#在编译时对此更加认真:
Cannot convert source type long to target type int.
Java是否还允许其他类似的情况?