System.out.println((long)(new Object()!=null ? 0 : new Object()));
在执行时,这给出了一个类强制转换异常,如下所示
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
这可能是一个me脚的问题,但是即使我们明确地将0转换为long类型,我仍然无法理解为什么会发生这种情况。
您的问题是,您正在尝试将分配给int
,long
从而导致ClassCastException
。
为了获得正确的结果,您将需要定义0
要转换为along
的实际long
值。
在这种情况下,int
如果您未明确定义值的类型,则您尝试分配的每个非浮点数实际上就是一个假名。
如果您只是写的话,这很容易看出来long i = 11111111111;
。您的编译器应告诉您,该数字的范围超出的范围int
。要告诉编译器该值应该尽可能长,只需L
在数字后添加一个:long i = 11111111111L;
。
在您的情况下,您的陈述应为
System.out.println((long)(new Object()!=null ? 0L : new Object()));
一些其他信息:
同样的情况也会发生double
。float f = 0.;
将无法正常工作,因为您需要通过F
在值后面添加a来将其定义为浮点数。float f = 0.F;
编辑:
您的值0
应该包含在内,Integer
因为它有可能返回Object
。如果您编写它,因为System.out.println((long)(new Object()!=null ? 0 : 1));
它将再次编译。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句