这是代码
import java.util.*;
class Example
{
public static void main(String args[])
{
final int x=127; int y=100;
byte b;
b=x; //Legal ?
b=y; //Illegal
}
}
Run Code Online (Sandbox Code Playgroud)
你能解释一下为什么b=y是非法的吗?我认为final意味着没有进一步的变化,对吗?
该final关键字的平均“没有进一步的变化”,所以你是正确的在那里。这里的问题与数据“宽度”有关。
Anint可以容纳比 a 更多的数据byte(即它比 a “更宽” byte)。这意味着当您这样做时b = x,您正在“缩小” 的宽度int以适应byte. 这仅适用如果编译器保证了int足够小以装配到byte,这需要int为<= 127,并且还为最终(以便它不能在以后被改变为> 127)。
在您的代码中,x和y都足够窄以适合 a byte,但只有xfinal ,因此它是编译器允许直接分配给byte变量的唯一一个。
final int x=127; final int y=100; // Made y final
byte b;
b=x; //Legal
b=y; //Also legal
Run Code Online (Sandbox Code Playgroud)
final int x=200; final int y=100; // Made x too big
byte b;
b=x; //Illegal
b=y; //Legal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |