Java注释可能不会被执行(举一个有趣的例子)

我们先来看下面这段代码:

public class Test {
    public static void main(String[] args) {
        String name = "沉默是金";
        // \u000dname="言多必失";
        System.out.println(name);
    }
}

运行后得出的结果如下:
言多必失
尽然不是沉默是金,,,,,有人会问:天,为什么?明明有//注释符号啊!感觉这十来年的 Java 算是白学了。老师说注释是不会执行的;就连《编程思想》里也说注释是不会执行的。那现在谁能告诉我这到底为什么?
哈哈哈哈,让小编来揭秘:
单纯从代码上来看,问题应该出在那串特殊的字符上——\u000d,\u000d 虽然看上去比较陌生,但我知道它是一个 Unicode 字符。问了一下搜索引擎后,知道它代表一个换行符——一种恍然大悟的感觉啊。我知道,Java 编译器不仅会编译代码,还会解析 Unicode 字符。
将上面这段代码编译后的字节码反编译一下,于是我看到下面这段代码:**

public class Test {
    public Test() {
    }

    public static void main(String[] args) {
        String name = "沉默是金";
        name = "言多必失";
        System.out.println(name);
    }
}

咦,两个反斜杠 // 真的不见了,这可以确定一点——注释确实是不会执行的。只不过 \u000d 把 name=“沉默王三”; 挤到了 // 注释的下一行,就好像下面这段代码的样子:

public class Test {
    public static void main(String[] args) {
        String name = "沉默是金";
        //
        name="言多必失";
        System.out.println(name);
    }
}

那这算不算是 Java 的 bug 呢?

说算也不算。因为通过允许 Java 源代码包含 Unicode 字符,可以确保在世界上任何一个区域编写的代码在其他地方执行。只能说 \u000d 是一种例外吧。

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页