for循环的条件部分中的final关键字
Posted
技术标签:
【中文标题】for循环的条件部分中的final关键字【英文标题】:final keyword in condition section of for loop 【发布时间】:2017-04-20 20:21:41 【问题描述】:A.
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");
问。为什么代码 A 打印输出“bb”而代码 B 返回错误“无法访问代码”?
【问题讨论】:
最终变量在运行时永远不能改变,但普通变量可以。所以在 A 有可能到达 for 循环的内部,但在 B 它永远不可能 澄清一下,在 A 中,如果中间有一些额外的代码,它理论上可以进入循环。换句话说,除非很明显,否则编译器不会尝试猜测流程。 @XtremeBaumer A 和 B 最终变量都没有改变。 【参考方案1】:final int a=10,b=20;
表示变量在编译后永远不会改变它的值
因此这个for循环
for(int i=0;a>b;i++)
有一个永不中断的条件(a>b 永远不会为真),因此循环是永远的,这变成了
System.out.print("bb");
“无法访问的代码”
【讨论】:
【参考方案2】:在部分 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
条件不可能为真。 (因为 a>b 总是假的)。
所以 JVM 会抛出编译错误说 Unreachable code。
【讨论】:
【参考方案3】:final 关键字表示 a 和 b 的值不能改变,即它们是值而不是变量,因此 for 循环永远不会执行内部语句,因此编译器推断 for 循环内部的代码是不可达的。
【讨论】:
在代码 B 中,试试这个:final int a=10,b=20; a = 25;这将产生编译错误。所以这意味着 a 和 b 是不可变的。【参考方案4】: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
【讨论】:
以上是关于for循环的条件部分中的final关键字的主要内容,如果未能解决你的问题,请参考以下文章