先上效果圖:

可以看到,我們將代碼注釋掉之后,輸出陳述句依舊執行,代碼沒有任何問題,
這里就涉及到了一個特殊字符:
\u000d
大家可以將這個字符復制到注釋后面,觀察程式運行效果,發現注釋掉的陳述句仍然可以正常執行!
所以這就有了很多騷操作
我這里先使用一個冒泡排序演算法來代替專案中的代碼邏輯:

1.我們可以將程式中的一些關鍵業務代碼“注釋”掉:

2.我們甚至可以將小括號大括號和關鍵字“注釋”掉:

3.甚至連關鍵字,變數宣告,特定的一些結構我們都可以“注釋”掉:

4.類名方法名算什么,統統注釋掉:

最后,來一張終極惡搞版:

這時有人說了:
哎呀你這個這么多錯誤,肯定運行不起來的啦,連上方運行按鈕都叉掉了~

令人震驚的是,他確確實實是可以運行的~
這時又有人說:
哎呀這個你肯定是快取了之前編譯好的程式,執行的都是以前的拉~
那我們就在程式中改變幾行代碼,加幾條輸出陳述句


所以我們可以證明,即使程式看起來不像樣子,但它真真正正的是可以運行的~
而且我們上述程式中,雖然被我們改的不成樣子,但是其實我們并沒有破換程式結構,如果破幻,是無法運行的!
我們隨便寫兩句不符合規定的陳述句:


利用這一點,我們甚至可以將真正的注釋破換成不符合規定的陳述句,混在程式代碼中(滑稽):

有些注釋,看似是注釋,實則…呃~
解釋一下原理:
說了這么多,我們這個字符為什么可以有這么大的魔力呢
我們經常可以在程式中看到以下注釋:

其實這些注釋就是我們所說的unicode編碼,是檔案保存編碼不一致導致的!
而我們的:\u000d也是一個unicode編碼,轉換后為換行符!
所以…
其實Java在編譯程序中是識別這些unicode編碼的,并且編譯這些unicode編碼是會被識別的,即便它存在于注釋之中…
所以我們上圖中代碼看似錯誤,實則為:

這樣就能看明白了吧,代碼看似混亂,實則沒有一處編譯錯誤,所以程式能正確執行啦!
滑稽:
魯迅說過:如果程式員想要自己無法被替代,就寫一些讓別人無法維護的程式~
這個帖子估計會在這一點上幫助你很多~

最后說一句:被打了別找我~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/66991.html
標籤:其他
