为什么方法体用分号填充可接受的语法?

Zer*_*tas 4 java methods

public static void main(String[] args) {
        System.out.println("World Hello!");;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;
               ;;;;;;;;;
               ;;;;;;;
               ;;;;;;;;;;;;;; 
               ;;;;;
}
Run Code Online (Sandbox Code Playgroud)

正常人是我想说:"那些分号在那里做的是什么!?"

Lui*_*oza 11

因为另一个分号旁边的一个简单分号是一个空语句.所以,很多半冒号彼此相邻都是很多空洞的陈述.它编译并运行没有问题.

  • @Sempus是的,你可以.但正如你在问题内容中所提到的那样,这有点荒谬. (2认同)
  • 计算机和计算机中没有任何无限的东西. (2认同)

dre*_*ash 7

根据Oracle Java语言规范:

空语句什么都不做.

EmptyStatement:
    ;
Run Code Online (Sandbox Code Playgroud)

执行空语句总是正常完成.

由于它自己允许连续分号的语言,编译器不会产生错误.

您还可以检查字节码以查看发生了什么,代码中有很多";" :

// Stack: 1, Locals: 1
public Duh1();
0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 3]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: Duh

  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 2, Locals: 1
  public static void main(java.lang.String[] args);
    0  getstatic java.lang.System.out : java.io.PrintStream [16]
    3  ldc <String "World Hello!"> [22]
    5  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]
    8  return
      Line numbers:
        [pc: 0, line: 5]
        [pc: 8, line: 15]
      Local variable table:
        [pc: 0, pc: 9] local: args index: 0 type: java.lang.String[]

Line numbers:
        [pc: 0, line: 5]
        [pc: 8, line: 6]
Run Code Online (Sandbox Code Playgroud)

和只有1";"的代码 :

// Method descriptor #6 ()V
  // Stack: 1, Locals: 1
  public Duh2();
    0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 3]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: Duh2

  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 2, Locals: 1
  public static void main(java.lang.String[] args);
    0  getstatic java.lang.System.out : java.io.PrintStream [16]
    3  ldc <String "World Hello!"> [22]
    5  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]
    8  return
      Line numbers:
        [pc: 0, line: 5]
        [pc: 8, line: 6]
      Local variable table:
        [pc: 0, pc: 9] local: args index: 0 type: java.lang.String[]

Line numbers:
        [pc: 0, line: 5]
        [pc: 8, line: 6]
Run Code Online (Sandbox Code Playgroud)

正如您可以检查单个";"的两个版本的字节码完全相同 和连续的多个";".