【发布时间】:2020-11-27 19:16:58
【问题描述】:
我在看一个典型的 for 循环:
class ForDemo {
public static void main(String[] args){
for(int i=1; i<11; i++){
System.out.println("Count is: " + i);
}
}
}
我对@987654322@ 后面的分号很满意:这是一个声明新变量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;))。
对这几个例子表示歉意,但我认为这个问题相对简单:如果存在表达式(没有;)作为命令语句(使用;)的情况,分号的功能是什么?
【问题讨论】:
-
" 如果 i++ 也是语句,为什么后面没有分号?" - i++ 是一个可以是语句的表达式,但在for循环声明中,它不是语句。我强烈建议你忽略 jshell 方面——基本上 jshell 可以有自己的规则;关注 Java 语言规则。
-
分号什么都不做。它仅用于分隔表达式和语句。它只是语言语法的一部分。 JShell 对代码的解释与 Java 编译器略有不同,它并不总是需要分号。
-
分号没有语义意义,它只是用在Java语句的末尾。这就像英语中的句号——我们把它写在句末,没有它,句子的意思是一样的,没有它,句子只是句法错误。
标签: java