for循环的条件部分中的final关键字

时间:2016-12-06 08:50:31

标签: java for-loop conditional final

一个。

    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返回错误“无法访问的代码”?

4 个答案:

答案 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

中的循环体