我写了以下课程:
public class TestOne {
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < 100; i++) {
count++;
}
System.out.println(count);
}
}
输出为100
。
然后我添加了分号:
public class TestOne {
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < 100; i++); { // <-- Added semicolon
count++;
}
System.out.println(count);
}
}
输出为1
。
结果令人难以置信。为什么添加的分号会如此显着地改变程序的含义?
这不是错误。分号成为for
循环体中唯一的“语句” 。
编写另一种方法可以使其更容易看到:
for (int i = 0; i < 100; i++)
;
{
count++;
}
由于分号,count++
带有的块变成只有一条语句的裸块,该语句根本不与for
循环关联。因此,此块及其count++
内部仅执行 一次 。
这在语法上是有效的java。for (int i = 0; i < 100; i++);
等效于:
for (int i = 0; i < 100; i++)
{ ; } // no statement in the body of the loop.
for
由于循环增量语句或终止条件中的副作用,这种形式的循环可能很有用。例如,如果您想编写自己的代码indexOfSpace
以在中找到空格字符的第一个索引String
:
int idx;
// for loop with no body, just incrementing idx:
for (idx = 0; string.charAt(idx) != ' '; idx++);
// now idx will point to the index of the ' '
问题内容: 我有以下MySql查询: 运行大约需要30秒,这很奇怪,因为如果我注释掉join或where子句,它会花费不到一秒钟的时间: 要么 每个过程不到一秒钟。 然后是STRAIGHT_JOIN关键字,在这里可以找到它的一个参考:http : //dev.mysql.com/doc/refman/5.0/en/join.html STRAIGHT_JOIN与JOIN相似,不同之处在于总是在右表
我写了一个小基准来比较Python、Ruby、JavaScript和C的不同解释器/编译器的性能。正如预期的那样,结果表明(优化的)C打败了脚本语言,但是它的系数非常高。 结果是: 我想知道是否有人能解释为什么优化的C代码比其他代码快三个数量级以上。 C基准测试使用命令行参数以防止在编译时预计算结果。 下面,我放置了不同语言基准测试的源代码,它们应该在语义上是等价的。此外,我提供了优化的C编译器输
对于我的Java类,要求我们在working For语句中添加分号,并解释为什么输出是这样的。我不明白为什么添加分号会产生错误的树类型错误,导致代码无法编译。代码下面是输出;我还向any标记添加了反斜杠,因为它不会以其他方式显示。那么,为什么for语句后面的分号会导致这样的错误呢?提前谢谢。 运行时间:
这是我创建的一个简单程序,用于在java中练习多线程和同步。我想知道是否有人能向我解释一下,当从public void run()方法中删除同步块时,为什么输出不同? 带:带同步块 无:无同步块
问题内容: 我正在阅读,发现在关闭正文之后,自己对“()”并不真正了解: 在: func(ch chan int){ch < -ACK } (replyChan) ` 在的示例中: 我不清楚关闭主体后添加和使用“()”的原因,希望有人可以清楚地解释一下。 问题答案: 这并不是说必须(仅)一个后添加 封 在。defer语句的语言规范要求其“ Expression” 始终 必须是函数调用。 为什么会这
我可以从数据库中获取数据并将其存储在中。所有工作都很好,但是如果我从表中编辑数据并按enter键,数据就不会编辑。 值更改后不会在表中重写。 构造函数和getter/setter