簡體   English   中英

注釋可以在運行時有所不同嗎?

[英]Can comments make any difference during the run-time?

什么是最好的評論我已經encouter 這個評論,upvoted 201次:

很久以前,我不小心通過添加注釋修復了Java3D中的段錯誤。 它是100%可復制的; 如果我刪除了評論,則會崩潰。 只要有評論,它就可以正常工作。 我認為這是一個奇怪的時間安排問題,但我從未弄清楚到底發生了什么。

這可能嗎?

如果他正在用Java3D修復段錯誤,我猜他是在用Java或C / C ++編寫代碼。 我認為在任何一種語言中,注釋都只是在編譯之前被刪除了...

如您所述,在Java中,注釋不包含在已編譯的字節碼中。 對於eaxmple,請參加以下課程:

public class test {

    public void methodWithoutComment() {
        System.out.println("This method does not have a comment");
    }

    public void methodWithComment() {
        // Method with comment
        System.out.println("This method has a comment");
    }
}

如果我們反思與字節碼javap ,使用javap -c test中,我們可以看到這兩種方法的字節碼是相同的-與被輸出到控制台的字符串除外:

public class test {
  public test();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public void methodWithoutComment();
    Code:
       0: getstatic     #2                  // Field     java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #3                  // String This method does not have a comment
       5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return

  public void methodWithComment();
    Code:
       0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #5                  // String This method has a comment
       5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}

不要這樣 為了運行Java程序,應將其編譯為字節碼,以便在編譯過程中將注釋刪除,並且不會影響程序的執行。

這里有兩個解釋。

一,記者錯了。 他們沒有進行他們認為正在做的編輯,或者編譯或執行不正確,或者錯誤是不穩定的,並且偶然地與他們的編輯相吻合, 等等

第二,編輯刪除了看起來像注釋的內容,但實際上與其他語法交互。 例如,考慮:

/* Start comment.
…
/* Not a new comment. */
… Some code here …
/* Sometimes a comment. */

當出現“不是新評論”行時,“此處有一些代碼”是不包含在評論中的源代碼。 當“ Not a new comment”行不存在時,“ Some code here”是注釋的一部分。

我認為在任何一種語言中,注釋都只是在編譯之前被刪除了...

看起來似乎是這樣,但是不幸的是,這種看上去無害的 Hello World程序甚至無法編譯。

為什么? 因為有評論 罪魁禍首是路徑的 具體來說, \\users 反斜杠\\后跟字母u ,表示Unicode轉義的開始。 尾隨的sers使其成為格式錯誤的Unicode轉義。 (如果\\u\u003c/code>后跟4個十六進制數字,那是可以的,是的,即使在注釋中也需要它。)

因此, 由於comment ,代碼甚至無法編譯。

public class HelloWorld {

    /**
     * Source: C:\users\devnull\HelloWorld.java
     */
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

暫無
暫無

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

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