我想知道为什么以下内容会显示InvalidCastException
:
Object obj = 9;
long num = (long)obj; //InvalidCastException
在网上搜索后,我发现Object
认为9为Int
,因此long
并不完全匹配Int
。
我的问题是为什么Object
将9视为Int
而不是short
或long
?
答案 0 :(得分:4)
因为9
是Int32
literal。指定Int64
字面用法
Object obj = 9L;
long num = (long)obj;
答案 1 :(得分:2)
如果你明确说它很长,你实际上可以做到这一点。纯数字被读作整数,除非有小数点。
Object obj = 9L;
long num = (long)obj;
以下内容也会导致无效的强制转换异常:
Object obj = 9L;
int num = (int)obj; //InvalidCastException
答案 2 :(得分:0)
int
是非十进制数字文字的默认数据类型,正如double
是十进制数字文字的默认值。您可以使用适当的后缀将数字文字强制为其他类型。您也可以为int
和double
使用后缀,但几乎没有人使用过后缀。