[英]Can comments make any difference during the run-time?
如您所述,在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.