阅读What is the best comment后,我在this上发表了评论,翻了201遍:
很久以前,我添加了一个注释,意外地修复了Java3D中的一个段错误。它是100%可重复的;如果我删除评论,它就崩溃了。只要评论在那里,它就能正常工作。我想这是一个奇怪的时间问题,但我从来没有弄清楚到底发生了什么。
这个是可能的吗?
如果他是在修复Java3D中的分段错误,我猜他是在用Java或C/C++编写代码。我认为在这些语言中的任何一种,注释在编译之前都会被删除.
发布于 2013-11-21 12:35:15
我认为在这些语言中的任何一种,注释在编译之前都会被删除.
看起来可能是这样,但不幸的是,这个看起来无害的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!");
}
}发布于 2013-11-21 11:58:56
正如您所述,在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
}发布于 2013-11-21 11:56:24
别这么想。为了运行Java程序,应该将其编译成字节码,以便在编译过程中删除注释,并且不会影响程序的执行。
https://stackoverflow.com/questions/20120298
复制相似问题