评论可以在运行期间发挥作用吗?

时间:2013-11-21 11:52:59

标签: java c++ c comments java-3d

阅读What is the best comment我发表了this评论,赞成赞成201次:

  

很久以前,我偶然通过添加一个来修复Java3D中的段错误   评论。它是100%可重复的;如果我删除了评论,它   坠毁。只要评论在那里,它就可以正常工作。我假设它   是一个奇怪的时间问题,但我从来没有弄清楚到底是什么   正在发生。

这可能吗?

如果他正在修复Java3D中的段错误,我猜他正在用Java或C / C ++编写代码。我认为在任何一种语言中,评论都会在编译之前被删除......

4 个答案:

答案 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!");
    }
}