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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章