java中关于转义字符的一个bug
在java中,你可以定义 char c = 'u4f60'; char m = 'u0045'; char e = 'u554a'; 这样的字面量,例如:
这样的代码不管在什么编码环境下都不会出现中文乱码的问题 但是你不能定义这样的字面量: char c = 'u000a'; char m = 'u0027'; 这是因为u000a和u0027是特殊转义字符,Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。程序会直接按照原字符转换为它们所表示的字符[JLS 3.2]。 u000a是一个LineFeed,即换行,这样程序会编译成 char c = ' '; 自然是编译错误了 另一个例子是:
对该程序的一种很肤浅的分析会认为它应该打印出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); 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程小技巧! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |