java中關(guān)于轉(zhuǎn)義字符的一個bug
在java中,你可以定義
char c = '\u4f60'; char m = '\u0045'; char e = '\u554a';
這樣的字面量,例如:
System.out.println("\u535a\u5ba2\u56ed");
這樣的代碼不管在什么編碼環(huán)境下都不會出現(xiàn)中文亂碼的問題
但是你不能定義這樣的字面量:
char c = '\u000a'; char m = '\u0027';
這是因為\u000a和\u0027是特殊轉(zhuǎn)義字符,Java對在字符串字面常量中的Unicode轉(zhuǎn)義字符沒有提供任何特殊處理。程序會直接按照原字符轉(zhuǎn)換為它們所表示的字符[JLS 3.2]。
\u000a是一個LineFeed,即換行,這樣程序會編譯成
char c = ' ';
自然是編譯錯誤了
另一個例子是:
System.out.println("a\u0022.length()+\u0022b".length());
對該程序的一種很膚淺的分析會認為它應(yīng)該打印出26,稍微深入一點的分析會認為該程序應(yīng)該打印16,如果你實際運行一遍,發(fā)現(xiàn)結(jié)果既不是26也不是16,而是2.
因為,\u0022是雙引號的轉(zhuǎn)義字,程序最終會編譯為
String str = "a".length()+"b"; System.out.println(str.length());
基于此案例,我寫了一個例子,大家可以運行嘗試一下結(jié)果
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\u0061\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);
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
三分鐘讀懂mybatis中resultMap和resultType區(qū)別
這篇文章主要給大家介紹了mybatis中resultMap和resultType區(qū)別的相關(guān)資料,resultType和resultMap都是mybatis進行數(shù)據(jù)庫連接操作處理返回結(jié)果的,需要的朋友可以參考下2023-07-07java+SpringBoot設(shè)計實現(xiàn)評教系統(tǒng)
這篇文章主要介紹了用過Java SpringBoot實現(xiàn)一個簡單的評價系統(tǒng),可以做到學(xué)生管理、教師管理、評教管理、指標管理、課程管理等。感興趣的可以了解一下2021-12-12SpringBoot整合MP通過Redis實現(xiàn)二級緩存方式
這篇文章主要介紹了SpringBoot整合MP通過Redis實現(xiàn)二級緩存方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01Spring超出最大會話數(shù)(Max?sessions?limit?reached:?10000)
在Spring系統(tǒng)中遇到的Maxsessionslimitreached:10000錯誤,該錯誤由于會話數(shù)超過默認限制10000而觸發(fā),下面就來介紹一下解決方法,感興趣的可以了解一下2024-12-12聊聊在獲取方法參數(shù)名方面,Spring真的就比Mybatis強?
在獲取方法參數(shù)名方面,Spring真的就比Mybatis強嗎?今天就帶大家聊聊這個話題,如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12ElasticSearch如何設(shè)置某個字段不分詞淺析
最近在學(xué)習(xí)ElasticSearch官方文檔過程中發(fā)現(xiàn)的某個問題,記錄一下 希望能幫助到后面的朋友,下面這篇文章主要給大家介紹了關(guān)于ElasticSearch如何設(shè)置某個字段不分詞的相關(guān)資料,需要的朋友可以參考下2022-04-04