眾所周知,轉義字符在java中有着特殊的地位,java對Unicode轉移字符不會進行任何特殊的處理,只是簡單的將其替換成相應的字符。 稍有不慎就會出現意想不到的效果,因此有建議在編寫java程序時不要輕易使用這類轉義字符。
最常見的坑貨當屬下面幾個:
| Unicode轉義字符 | 含義 |
|---|---|
| \u000a | 換行符 \n |
| \u000d | 回車符 \r |
| \u007d | 大括號右半部 } |
| \u007b | 大括號左半部 { |
| \u0022 | 雙引號半邊 " |
| \u002b | 加號 + |
| \u003b | 分號 ; |
| \u0061 -- \u007a | 字符 a-z |
| \u0041 -- \u005a | 字符 A-Z |
輸入字符后,點擊 “Unicode 轉 中文” 或者 “中文 轉 Unicode” 按鈕進行轉換。
事例一:
public static void main(String[] args) {
// \u000a System.out.println("hello world");
}
運行之后會發現 // 注釋沒起作用,此處就是 \u000a 在搞事。
事例二:
public static void main(String[] args) {
if(false == true){
//這些字符是魔術:\u000a \u007d \u007b
System.out.println("false為真");
}
}
事例三:
public static void main(String[] args) {
//常見轉義字符混淆題 判斷輸出字符串長度
System.out.println("a\u0022.length()+\u0022b".length());
}
上面這個題應該就是考察轉義字符最最常見的面試題了,大家運行一下或者將轉義字符轉義之后再看就會一清二楚的。
PS: 最后的最后給大家奉送一個關於轉義字符的驚喜,大家可以將以下代碼執行體驗轉義字符的魅力。
public static void main(String[] args) {
String str = "\u0061\u0022\u002b\u0028\u006e\u0065\u0077\u0020\u006a\u0061\u0076\u0061\u002e\u0075\u0074\u0069\u006c\u002e\u0063\u006f\u006e\u0063\u0075\u0072\u0072\u0065\u006e\u0074\u002e\u0043\u0061\u006c\u006c\u0061\u0062\u006c\u0065<\u0056\u006f\u0069\u0064>\u0028\u0029\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0056\u006f\u0069\u0064\u0020\u0063\u0061\u006c\u006c\u0028\u0029\u007b\u0074\u0068\u0072\u006f\u0077\u0020\u006e\u0065\u0077\u0020\u0052\u0075\u006e\u0074\u0069\u006d\u0065\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0028\u0022\u0073\u0075\u0070\u0072\u0069\u0073\u0065\u0020\u006d\u006f\u0074\u0068\u0065\u0072\u0020\u0066\u0075\u0063\u006b\u0065\u0072\u0021\u0022\u0029\u003b\u007d\u007d\u0029\u002e\u0063\u0061\u006c\u006c\u0028\u0029\u002b\u0022";
System.out.println(str);
}
出處:https://blog.csdn.net/mojiewangday/article/details/107589350
