阅读What is the best comment我发表了this评论,赞成赞成201次:
很久以前,我偶然通过添加一个来修复Java3D中的段错误 评论。它是100%可重复的;如果我删除了评论,它 坠毁。只要评论在那里,它就可以正常工作。我假设它 是一个奇怪的时间问题,但我从来没有弄清楚到底是什么 正在发生。
这可能吗?
如果他正在修复Java3D中的段错误,我猜他正在用Java或C / C ++编写代码。我认为在任何一种语言中,评论都会在编译之前被删除......
答案 0 :(得分:2)
正如您所述,在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
}
答案 1 :(得分:1)
不要这么认为。为了运行Java程序,它应该被编译成字节码,因此在编译期间将删除注释,并且不会影响程序的执行。
答案 2 :(得分:1)
以下是对此的两种解释。
一,记者错了。他们没有进行他们认为正在编辑或正在编译或执行错误的编辑,或者错误是不稳定的,并且与他们的编辑偶然相符, et cetera 。二,编辑删除了看似评论的内容,但它实际上与其他语法进行了交互。例如,考虑:
/* Start comment.
…
/* Not a new comment. */
… Some code here …
/* Sometimes a comment. */
当出现“非新评论”行时,“此处的某些代码”是不属于评论的源代码。当“不是新评论”行不存在时,“此处的某些代码”是评论的一部分。
答案 3 :(得分:1)
我认为在任何一种语言中,评论都会被删除 在汇编之前......
看起来似乎如此,但不幸的是,这个无害的 - 查看Hello World
程序甚至无法编译。
为什么呢?由于评论。罪魁祸首是源的路径。具体来说,\users
。反斜杠\
后跟字母u
,表示Unicode转义的开始。尾随sers
使其成为一个格式错误的Unicode转义符。 (如果\u
后跟4个十六进制数字,那就没问题了 - 是的,即使在评论中你也需要它。)
因此,由于评论,代码甚至不会编译。
public class HelloWorld {
/**
* Source: C:\users\devnull\HelloWorld.java
*/
public static void main(String[] args) {
System.out.println("Hello World!");
}
}