K.Sierra 在她的书《SCJP 学习指南》中提到“我们知道文字整数始终是 int,但更重要的是,涉及任何 int 大小或更小的表达式的结果始终是 int。”
我已经开始尝试,我对以下结果有点困惑:
byte a = 1; // correct
byte b = 1 + a; // incorrect (needs explicit casting)
byte c = 1 + 1; // correct (I expected it to be incorrect)
谁能向我解释为什么最后一个例子不需要转换?为什么 Java 编译器要进行隐式强制转换?是因为有2个int字面量吗?非常感谢澄清。
隐式类型转换仅在您的值RHS
已知于compile-time
,意味着他们是compile-time constants
。在其他情况下,您需要进行显式类型转换。
So: -
byte c = 1 + 1; // Value of `1 + 1` is known at compile time. Implicit cast
byte c = 1 + a; // Value of `1 + a` is evaluated at runtime. Explicit cast needed
另请注意,如果您声明变量a
as final byte a = 1
,那么第二个作业将编译,在这种情况下,你的a
将是一个编译时间常数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)