1
6
因为
编译器只是考虑到非最终变量x在该时间(通过任何方式)发生变化的可能性,因此不会简单地将其视为20。 如果将x定义为final,则隐式对话将起作用:
|
2
0
当你写作时
|
3
0
我不知道编译器实现的细节。我想原因是编译器无法进行检查,因为x的值在编译时可能未知。所以它只能假设它是一个int。否则,您希望编译器的行为如何? 如果你看一下*运算符原型 请参阅: https://www.cs.cmu.edu/~pattis/15-1XX/15-200/lectures/voe/lecture.html (int,int)只有一个,所以从技术上讲,(short,short)没有一个。 那么你可能会问为什么短x=20有效? 原因是Java只能允许自动转换为短值,如果它是一个常数,在这种情况下,“20”是最终值,而x*2不是最终值 看见 Java - short and casting |
4
0
您可以使用以下符号使用强制转换将算术运算的结果分配给
我认为答案在Java语言规范中。请看第4.2.2点,有一个数值运算符列表,这些运算符会导致int或long类型的值,这就是为什么java将其视为int并需要强制转换的原因: https://docs.oracle.com/javase/specs/jls/se9/html/jls-4.html#jls-4.2.2 |
Adeline · Swift日期文字/从字符串初始化日期 7 年前 |
cmeeren · 为什么不能在F#中添加int和float文字? 7 年前 |
Soldalma · 我可以创建条件文字吗? 7 年前 |
Nathan · 在Fixnum的实例上定义方法 7 年前 |
rocking · 比较两个字符串文字[重复] 10 年前 |