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 是一种例外吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值