Cri*_*scu 8 java precision compiler-errors
我最近了解到,在将一些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是否还允许其他类似的情况?
long 可以提升为 float 或 double,这会导致精度损失:
public static void main(String[] args) {
float f = Long.MAX_VALUE;
double d = Long.MAX_VALUE;
System.out.println(Long.MAX_VALUE);
System.out.println(f);
System.out.println(d);
}
Run Code Online (Sandbox Code Playgroud)
印刷
9223372036854775807
9.223372E18
9.223372036854776E18
Run Code Online (Sandbox Code Playgroud)
不过,我怀疑 C# 也会以同样的方式做到这一点。
除了您已经提到的复合赋值运算符之外,我相信这些都是隐式转换可以更改值的情况。
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |