一个。
int a=10,b=20;
for(int i=0;a>b;i++)
{
System.out.print("aa");
}
System.out.print("bb");
B中。
final int a=10,b=20;
for(int i=0;a>b;i++)
{
System.out.print("aa");
}
System.out.print("bb");
Q值。为什么代码A打印输出“bb”而代码B返回错误“无法访问的代码”?
答案 0 :(得分:2)
final int a=10,b=20;
表示变量在编译后不会改变其值
因此这适用于循环
for(int i=0;a>b;i++)
有一个永不破坏的条件(&b;永远不会是真的),因此循环是永远的,这就变成了
System.out.print("bb");
"无法访问的代码"
答案 1 :(得分:1)
在A部分代码可以如下更改并打印两个输出。请注意,在循环上执行时,可以更改a和b上的值。输出将为 aabb
int a=10,b=20;
for(a=30;a>b;)
{
System.out.print("aa");
a=a-20;
}
System.out.print("bb");
在运行时间的B部分中,由于这些是最终变量,因此无法更改a或b的值。由于这个原因,JVM可以确定 a>b
条件不可能成为现实。 (因为> b总是假的)。
因此,JVM将抛出编译错误,指出无法访问的代码。
答案 2 :(得分:1)
最后一个关键词说a和b值不能改变,即它们是值而不是变量,因此for循环永远不会执行内部语句,因此编译器推断出for循环中的代码是不可达的。
答案 3 :(得分:1)
B返回错误“无法访问的代码”
for(int i=0;a>b;i++) //with final modifier, `a` & `b` are constants
编译器如何使用final修饰符查看代码,编译器抱怨
for(int i=0;10>20;i++)
10将始终小于20,因此
中的循环体unreachable code