謎題15:令人暈頭轉向的Hello

來源:互聯網
上載者:User

標籤:代碼   test   unicode   理由   產生   逸出字元   unit   問題   十六   

下面的程式是對一個老生常談的例子做出了稍許的變化之後的版本。那麼,它會列印出什麼呢?

/** * Generated by the IBM IDL-to-Java compiler, version 1.0 * from F:\TestRoot\apps\a1\units\include\PolicyHome.idl * Wednesday, June 17, 1998 6:44:40 o’clock AM GMT+00:00 */public class Test{    public static void main(String[] args){        System.out.print("Hell");        System.out.println("o world");    }}

這個謎題看起來相當簡單。該程式包含了兩條語句,第一條列印Hell,而第二條在同一行列印。 world,從而將兩個字串有效地串連在了一起。因此,你可能期望該程式列印出Hello world。但是很可惜,你犯了錯,實際上,它根本就通不過編譯。

問題在於注釋的第三行,它包含了字元\units。這些字元以反斜線(\)以及緊跟著的字母u開頭的,而它(\u)表示的是一個Unicode逸出字元的開始。遺憾的是,這些字元後面沒有緊跟四個十六進位的數字,因此,這個Unicode逸出字元是病構的,而編譯器則被要求拒絕該程式。Unicode逸出字元必須是良構的,即使是出現在注釋中也是如此。

在注釋中插入一個良構的Unicode逸出字元是合法的,但是我們幾乎沒有什麼理由去這麼做。程式員有時會在JavaDoc注釋中使用Unicode逸出字元來在文檔中產生特殊的字元。

// Unicode逸出字元在JavaDoc注釋中有問題的用法/** * This method calls itself recursively, causing a * StackOverflowError to be thrown. * The algorithm is due to Peter von der Ah\u00E9. */

這項技術表示了Unicode逸出字元的一種沒什麼用處的用法。在Javadoc注釋中,應該使用HTML實體逸出字元來代替Unicode逸出字元:

/** * This method calls itself recursively, causing a * StackOverflowError to be thrown. * The algorithm is due to Peter von der Ahé. */

前面的兩個注釋都應該是的在文檔中出現的名字為“Peter der Ahé”,但是後一個注釋在源檔案中還是可理解的。

可能你會感到很詫異,在這個謎題中,問題出在注釋這一資訊來源自一個實際的bug報告。該程式是機器產生的,這使得我們很難追蹤到問題的源頭——IDL-to-Java編譯器。為了避免讓其他程式員也陷入此境地,在沒有將Windows檔案名稱進行預先處理,以消除的其中的反斜線的情況下,工具應該確保不將Windows檔案名稱置於所產生的Java源檔案的注釋中。

總之,要確保字元\u不出現在一個合法的Unicode逸出字元上下文之外,即使是在注釋中也是如此。在機器產生的程式碼中要特別注意此問題。

謎題15:令人暈頭轉向的Hello

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.