首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行期间,评论会有什么不同吗?

问在运行期间,评论会有什么不同吗?
EN

Stack Overflow用户
提问于 2013-11-21 11:52:58
回答 4查看 227关注 0票数 2

阅读What is the best comment后,我在this上发表了评论,翻了201遍:

很久以前,我添加了一个注释,意外地修复了Java3D中的一个段错误。它是100%可重复的;如果我删除评论,它就崩溃了。只要评论在那里,它就能正常工作。我想这是一个奇怪的时间问题,但我从来没有弄清楚到底发生了什么。

这个是可能的吗?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-21 12:35:15

我认为在这些语言中的任何一种,注释在编译之前都会被删除.

看起来可能是这样,但不幸的是,这个看起来无害的Hello World程序甚至无法编译。

为什么?因为的注释。罪魁祸首是源头之路。具体来说,\users.反斜杠\后面跟着字母u,表示Unicode转义的开始。尾随的sers使它成为一种格式错误的Unicode转义。(如果\u后面跟着4位十六进制数字,那就没问题了--是的,即使在评论中你也需要这样做。)

因此,由于注释,代码甚至不会编译。

代码语言:javascript
复制
public class HelloWorld {

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

Stack Overflow用户

发布于 2013-11-21 11:58:56

正如您所述,在Java中,已编译的字节码中不包含注释。对于eaxmple,请选修以下课程:

代码语言:javascript
复制
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,我们可以看到这两种方法的字节码是相同的-除了输出到控制台的字符串:

代码语言:javascript
复制
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
}
票数 2
EN

Stack Overflow用户

发布于 2013-11-21 11:56:24

别这么想。为了运行Java程序,应该将其编译成字节码,以便在编译过程中删除注释,并且不会影响程序的执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20120298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档