加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java中关于转义字符的一个bug

发布时间:2020-12-14 14:31:10 所属栏目:Java 来源:网络整理
导读:在java中,你可以定义 char c = 'u4f60';char m = 'u0045';char e = 'u554a'; 这样的字面量,例如: System.out.println("u535au5ba2u56ed"); 这样的代码不管在什么编码环境下都不会出现中文乱码的问题 但是你不能定义这样的字面量: char c = 'u000a

在java中,你可以定义

char c = 'u4f60';
char m = 'u0045';
char e = 'u554a';

这样的字面量,例如:

System.out.println("u535au5ba2u56ed");

这样的代码不管在什么编码环境下都不会出现中文乱码的问题

但是你不能定义这样的字面量:

char c = 'u000a';
char m = 'u0027';

这是因为u000a和u0027是特殊转义字符,Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。程序会直接按照原字符转换为它们所表示的字符[JLS 3.2]。

u000a是一个LineFeed,即换行,这样程序会编译成

char c = '
';

自然是编译错误了

另一个例子是:

System.out.println("au0022.length()+u0022b".length());   

对该程序的一种很肤浅的分析会认为它应该打印出26,稍微深入一点的分析会认为该程序应该打印16,如果你实际运行一遍,发现结果既不是26也不是16,而是2.

因为,u0022是双引号的转义字,程序最终会编译为

String str = "a".length()+"b";
System.out.println(str.length()); 

基于此案例,我写了一个例子,大家可以运行尝试一下结果

String str = "u0061u0022u002bu0028u006eu0065u0077u0020u006au0061u0076u0061u002eu0075u0074u0069u006cu002eu0063u006fu006eu0063u0075u0072u0072u0065u006eu0074u002eu0043u0061u006cu006cu0061u0062u006cu0065<u0056u006fu0069u0064>u0028u0029u007bu0070u0075u0062u006cu0069u0063u0020u0056u006fu0069u0064u0020u0063u0061u006cu006cu0028u0029u007bu0074u0068u0072u006fu0077u0020u006eu0065u0077u0020u0052u0075u006eu0074u0069u006du0065u0045u0078u0063u0065u0070u0074u0069u006fu006eu0028u0022u0073u0075u0070u0072u0069u0073u0065u0020u006du0061u0074u0068u0065u0072u0020u0066u0075u0063u006bu0065u0072u0021u0022u0029u003bu007du007du0029u002eu0063u0061u006cu006cu0028u0029u002bu0022";
System.out.println(str);

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程小技巧!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读