Java表示式的陷阱——輸入法、註釋字元和轉義字元的陷阱
阿新 • • 發佈:2018-12-25
3、輸入法、註釋字元和轉義字元的陷阱
3、1 輸入法導致的陷阱
對於Java語言而言,它使用空格、Tab製表符(半形狀態)作為分隔符,因此一個Java程式中通常需要包含大量空格。但如果不小心把輸入法切換到全形狀態,那麼輸入的空格都會變成全形狀態,編譯該程式時將會提示"非法字元:\12288"的錯誤。 注意:Java程式中通常不能包含全形字元,但Java程式的字串和註釋中完全可以包含全形字元。3、2 註釋字元的陷阱
上面程式碼將會報錯:Invalid unicode。也就是說Java程式並沒有完全忽略註釋部分的內容。編譯器在上面程式中檢測到一個非法字元,Java程式允許直接使用\uXXXX的形式代表字元,要求\u後面的4個字元必須是0~F字元,而上面註釋中包含了\user,這不符合Java對Unicode轉義字元的要求。public class BinaryTest { //存放位置:D:\user\Java學習 public static void main(String[] args) { int i = 0b1010_1010; byte b = (byte)0b1010_1010; System.out.println(i == b); } }
3、3 轉義字元的陷阱
Java程式提供了三種方式來表示字元。- 直接使用單括號括起來的字元值,如'a'。
- 使用轉義字元,如'\n'。
- 使用Unicode轉義字元,如'\u0066'。
public class StringLength {
public static void main(String[] args) {
System.out.println("abc\u000a".length());
}
}
上面程式試圖計算“abc\u000a”字串的長度,表面上看這個程式應該輸出4,但是編譯程式是會報錯:String literal is not properly closed by a double-quote。引起這個錯誤的原因是Java對Unicode轉義字元不會進行任何特殊處理,只是簡單的將Unicode轉義字元替換成相應的字元。對於\u000a而言,它相當於一個換行符。
另外,在註釋行中如果使用\u開頭也要注意Unicode轉義字元的相關問題。