源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-08-23 21:17 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java中关于转义字符的一个bug
在java中,你可以定义
char c = 'u4f60';
char m = 'u0045';
char e = 'u554a';
这样的字面量,例如: [code]System.out.println("u535au5ba2u56ed");[/code] 这样的代码不管在什么编码环境下都不会出现中文乱码的问题 但是你不能定义这样的字面量:
char c = 'u000a';
char m = 'u0027';
这是因为u000a和u0027是特殊转义字符,Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。程序会直接按照原字符转换为它们所表示的字符[JLS 3.2]。 u000a是一个LineFeed,即换行,这样程序会编译成
char c = '
';
自然是编译错误了 另一个例子是: [code]System.out.println("au0022.length()+u0022b".length());   [/code] 对该程序的一种很肤浅的分析会认为它应该打印出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);
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程素材网!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部