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