簡體   English   中英

分號實際上是做什么的?

[英]What does the semicolon actually do?

我正在查看一個典型的 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) without ; ),而不是; if (x = true;) )。

對這幾個例子表示歉意,但我認為問題相對簡單:如果存在表達式(不帶; )用作命令語句(帶; )的情況,那么分號的 function 是什么?

分號什么也不做,因為for循環(除其他外)定義為

BasicForStatement: for (ForInitopt; Expressionopt; ForUpdateopt) 語句

根據https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html

根據定義,三個部分之間有兩個分號。

分號是堆棧調用的分隔符。 if()的內部需要一個boolean ,而不是堆棧調用。 僅在{}內是預期的語句。

for()內部需要三個堆棧調用:一個定義循環變量,一個定義中斷子句,一個定義每個循環之后發生的事情。

示例:構造for(;;); 是一個有效的 java 構造。 但是你永遠不應該將它用作它唯一會做的事情就是永遠循環:你沒有定義變量、中斷條件或在每次調用后執行的東西。 在循環期間,您也什么都不做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM