![]() |
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 |
![]() |
Than21 · scala确保块中的隐式转换失败 7 年前 |
![]() |
Dr. Strangelove · C#协方差:具有不同接口特征的类 7 年前 |
![]() |
Ash · 使用转换运算符强制转换对象失败 7 年前 |
![]() |
Skye MacMaster · 具有隐式类型转换的调用函数 7 年前 |