我在看一个典型的for循环:
class ForDemo {
public static void main(String[] args){
for(int i=1; i<11; i++){
System.out.println("Count is: " + i);
}
}
}
我对后面的分号很满意 int i=1
:声明新变量的语句 i
. 如果 i++
也是一个语句,为什么后面没有分号?
另一个例子。我打开了jshell并放了以下内容:
jshell> int a=1;
a ==> 1
jshell> a++
$2 ==> 1
jshell> a
a ==> 2
jshell> int b=1;
b ==> 1
jshell> b++;
$5 ==> 1
jshell> b
b ==> 2
换句话说,命令 ++
独立于是否有分号工作。我以为没有它就不能工作。
最后一个例子(改编自关于 =
以及 ==
):
jshell> boolean x = false;
x ==> false
jshell> if (x = true) System.out.println("Sorry! This is wrong ...");
Sorry! This is wrong ...
jshell> boolean x = false;
x ==> false
jshell> if (x = true;) System.out.println("Sorry! This is wrong ...");
| Error:
| ')' expected
| if (x = true;) System.out.println("Sorry! This is wrong ...");
| ^
我明白了=和==之间的区别。我的问题是为什么它在上半场有效( if (x = true)
没有 ;
),而不是用 ;
( if (x = true;)
).
很抱歉有几个例子,但我认为问题相对简单:如果有一个表达式(没有 ;
)用作命令语句(与 ;
),分号的作用是什么?
2条答案
按热度按时间4smxwvx51#
分号是堆栈调用的分隔符。内部
if()
需要布尔值,而不是堆栈调用。只在里面{}
应为语句。内部
for()
需要三个堆栈调用:一个定义循环变量,一个定义breaking子句,一个定义每个循环之后发生的事情。示例:构造
for(;;);
是有效的java构造。但是您永远不应该使用它,因为它所做的唯一事情就是永远不进行循环:您不需要定义变量、中断条件或每次调用后执行的内容。在循环过程中,你也什么都不做。r8xiu3jd2#
分号不起作用,因为
for
循环定义为基本陈述:for(forinitopt;表达点;forupdateopt)语句
根据https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html
根据定义,这三个部分之间有两个分号。