【发布时间】:2012-12-06 16:23:24
【问题描述】:
我最近learned,在将一些 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#
相当于:(details here)
int i = 0;
long lng = 0xffffffffffffL;
i = (int)(i + lng);
从而默默地造成损失幅度的机会。
C# 在编译时对此更加认真:Cannot convert source type long to target type int.
Java 是否允许其他类似的情况?
【问题讨论】:
-
可能是因为这不是关于 C# 的问题,它只是指它??当人们仅仅因为他们在问题中提到它而包含
[java]时,我发现它很烦人(但我不反对)。 -
@Peter 好的,你可能有道理。当我问这个问题时,我的心态非常 C#-y(在修复从 Java 转换而来的 C# 代码方面非常努力)。从未想过从读者的角度添加标签 :) [C# 标签已删除]
-
我只是在这里猜测。当人们投反对票时,我觉得很烦,但没有评论为什么。这就像告诉你;我觉得你做错了什么,但我没有告诉你是什么,或者我什至不知道这是什么。 ;)
-
@Peter 所以...嗯,为什么要删除你的答案?
-
虽然在我给出的示例中它很相似,但它与隐式强制转换不同。 Meriton 指出你不能给它超出范围的值,我注意到你不能写
byte b = 1.0;但你可以写b += 1.0;
标签: java compiler-errors precision