1. 程式人生 > >Java表示式的陷阱——輸入法、註釋字元和轉義字元的陷阱

Java表示式的陷阱——輸入法、註釋字元和轉義字元的陷阱

3、輸入法、註釋字元和轉義字元的陷阱

3、1 輸入法導致的陷阱

          對於Java語言而言,它使用空格、Tab製表符(半形狀態)作為分隔符,因此一個Java程式中通常需要包含大量空格。但如果不小心把輸入法切換到全形狀態,那麼輸入的空格都會變成全形狀態,編譯該程式時將會提示"非法字元:\12288"的錯誤。 注意:Java程式中通常不能包含全形字元,但Java程式的字串和註釋中完全可以包含全形字元。

3、2 註釋字元的陷阱

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);
	}
}
       上面程式碼將會報錯:Invalid unicode。也就是說Java程式並沒有完全忽略註釋部分的內容。編譯器在上面程式中檢測到一個非法字元,Java程式允許直接使用\uXXXX的形式代表字元,要求\u後面的4個字元必須是0~F字元,而上面註釋中包含了\user,這不符合Java對Unicode轉義字元的要求。

3、3 轉義字元的陷阱

       Java程式提供了三種方式來表示字元。
  1. 直接使用單括號括起來的字元值,如'a'。
  2. 使用轉義字元,如'\n'。
  3. 使用Unicode轉義字元,如'\u0066'。
       Java對於Unicode轉義字元時不會進行任何處理,它會將Unicode轉義字元直接替換為對應的字元,這將會給Java程式帶來一些潛在的陷阱。
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轉義字元的相關問題。