在条件部分最终关键字for循环
问题描述:
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返回错误 “不可达代码” ?
答
final int a=10,b=20;
装置后编译
因此这对于循环
for(int i=0;a>b;i++)
具有从未断裂条件(A> B永远不会为真),因此循环变量永远不会改变它的值永远,这成为
System.out.print("bb");
“unreachab le code“
答
关于部分可以像下面那样更改代码并打印两个输出。请注意,在循环中执行时,可以更改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
。 (因为a> b总是错误的)。
因此,JVM会抛出编译错误说无法访问的代码。
答
最后一个关键字表示a和b的值不能被改变,即它们是值而不是变量,因此for循环永远不会执行内部语句,所以编译器推断for循环内的代码是不可访问的。
+0
代码B,试试这个:final int a = 10,b = 20; a = 25;这会导致编译错误。所以这意味着a和b是不可变的。 –
答
乙返回错误 “无法访问代码”
for(int i=0;a>b;i++) //with final modifier, `a` & `b` are constants
编译器是如何看待你的代码最终的修改,这就是编译器抱怨
for(int i=0;10>20;i++)
10将永远少于20,所以你的博dy在
unreachable code
最终变量永远不能在运行时更改,但正常变量可以。所以在** A **有可能达到for循环的内部,但在** B **中它永远不可能 – XtremeBaumer
为了澄清,在** A **中理论上*它可能会进入循环,如果之间有一些额外的代码。换句话说,编译器不会试图猜测流,除非它真的很明显。 – shmosel
@ XtremeBaumer A和B的最终变量都没有改变。 –