關於' \uxxxx'字符在編譯時的處理

以下所示代碼:html

class GrammarTest{
	public static void main(String[] args){
		char ch=0x30;
		System.out.println(ch); //正常,輸出0
		ch='\u0030';
		System.out.println(ch);  //正常,輸出0
		System.out.println("a\u0022.length() + \u0022b".length());  //輸出2
	}
}

    結果說明,編譯結果錯誤提示以下:java

    上述程序有編譯錯誤。若是刪除多行註釋,則編譯錯誤消除.git

    【結果分析】:github

    首先分析編譯錯誤的緣由,能夠確定編譯錯誤是由多行註釋引發的,它包含了一個\u開頭的Unicode轉義字符序列,可是卻沒有緊跟着4個16進制的數(0~65535),致使該轉義失效。java是容許在註釋以及代碼中使用\u開頭的Unicode轉義字符的,可是要求轉義必須有效,不然編譯器會報告錯誤。web

    刪除該段註釋或者使該轉義有效以後,執行上述代碼獲得的結果是2,又是爲何呢?原來,Java 對在字符串字面常量中的 Unicode 轉義字符沒有提供任何特殊處理。編譯器在將程序解析成各類符號以前,先將Unicode轉義字符轉換成爲它們所表示的字符。因此,程序中的第一個 Unicode轉義字符將做爲一個單字符字符串字面常量( "a")的結束引號,而第二個Unicode 轉義字符將做爲另外一個單字符字符串字面常量( "b")的開始引號,該程序實際運行的代碼以下:code

System.out.println("a".length() + "b".length());htm

    這樣來看,輸出結果爲2也就不足爲奇了。注意對於字符串類型字符串

源代碼地址:https://github.com/rocwinger/java-disabuseget

相關文章
相關標籤/搜索