分号实际上是做什么的?

yzuktlbb  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(381)

我在看一个典型的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;) ).
很抱歉有几个例子,但我认为问题相对简单:如果有一个表达式(没有 ; )用作命令语句(与 ; ),分号的作用是什么?

4smxwvx5

4smxwvx51#

分号是堆栈调用的分隔符。内部 if() 需要布尔值,而不是堆栈调用。只在里面 {} 应为语句。
内部 for() 需要三个堆栈调用:一个定义循环变量,一个定义breaking子句,一个定义每个循环之后发生的事情。
示例:构造 for(;;); 是有效的java构造。但是您永远不应该使用它,因为它所做的唯一事情就是永远不进行循环:您不需要定义变量、中断条件或每次调用后执行的内容。在循环过程中,你也什么都不做。

r8xiu3jd

r8xiu3jd2#

分号不起作用,因为 for 循环定义为
基本陈述:for(forinitopt;表达点;forupdateopt)语句
根据https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html
根据定义,这三个部分之间有两个分号。

相关问题