- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码块给我一个编译时错误。
while(false)
{
System.out.println("HI");
}
该错误表明存在无法访问的语句。但以下代码可以编译
boolean b=false;
while(b)
{
System.out.println("Hi");
}
我能想到的就是这个 -> In case-1 as false 是一个文字,所以编译器发现它无法访问,而 in case2 变量 b 在 while 条件 block 中在运行时被检查,所以没有编译错误?
最佳答案
编译器编写者无法决定将哪些条件标记为错误 - 规则位于 Java 语言规范中,对于此问题,请参见 14.21 Unreachable Statements .
相关句子是:“当且仅当 while 语句可达且条件表达式不是值为 false 的常量表达式时,所包含的语句可达。”
在每种情况下,您都有一个可达的 while 语句。在第一个版本中,false
是一个常量表达式,其值为 false,因此所包含的语句不被认为是可达的。在第二个版本中,b
根本不是常量表达式,因此所包含的语句被视为可访问。
将 final
添加到 b
的声明中会将 while 条件更改为值为 false 的常量表达式,从而使所包含的语句再次无法访问。
在 JLS 中指定什么是编译时错误、什么不是编译时错误的规则的好处是所有 Java 编译器都应该接受相同的程序集。规则一般不要求编译器做数据流分析,大概是为了限制编写编译器的成本和难度。
关于java - 令人困惑的 while block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752999/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!