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

 更新时间:2017年02月17日 08:33:53   作者:   
本文主要介绍了java中关于转义字符的一个bug。具有很好的参考价值,下面跟着小编一起来看下吧

在java中,你可以定义

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

这样的字面量,例如:

System.out.println("\u535a\u5ba2\u56ed");

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

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

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

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

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

char c = '
';

自然是编译错误了

另一个例子是:

System.out.println("a\u0022.length()+\u0022b".length());   

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

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

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

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

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);

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

相关文章

  • QueryWrapper中查询的坑及解决

    QueryWrapper中查询的坑及解决

    这篇文章主要介绍了QueryWrapper中查询的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。
    2022-01-01
  • Java使用线程池的优势有哪些

    Java使用线程池的优势有哪些

    这篇文章主要介绍了Java使用线程池的优势有哪些,帮助大家更好的理解和掌握java池化技术,感兴趣的朋友可以了解下
    2020-09-09
  • 关于Springboot中JSCH的使用及说明

    关于Springboot中JSCH的使用及说明

    这篇文章主要介绍了关于Springboot中JSCH的使用及说明,具有很好的参考价值,希望对大家有所帮助。
    2022-09-09
  • java hashtable实现代码

    java hashtable实现代码

    这篇文章介绍了java hashtable实现代码,有需要的朋友可以参考一下
    2013-10-10
  • Mybatis Plugin拦截器开发过程详解

    Mybatis Plugin拦截器开发过程详解

    这篇文章主要介绍了Mybatis Plugin拦截器开发过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java反射(JDK)与动态代理(CGLIB)详解

    Java反射(JDK)与动态代理(CGLIB)详解

    下面小编就为大家带来一篇浅谈Java反射与动态代理。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-08-08
  • 深入了解Java GC的工作原理

    深入了解Java GC的工作原理

    下面小编就为大家带来一篇深入了解Java GC的工作原理。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • java对象的序列化和反序列化

    java对象的序列化和反序列化

    这篇文章主要为大家详细介绍了java对象的序列化和反序列化,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Java语言Iterator转换成 List的方法

    Java语言Iterator转换成 List的方法

    在 Java 中,迭代器(Iterator)是一种用于遍历集合中元素的对象,它提供了一种简单而一致的方式来访问集合中的元素,而不需要暴露集合内部的结构,这篇文章主要介绍了Java语言Iterator转换成 List的方法,需要的朋友可以参考下
    2023-08-08
  • swing分割窗口控件JSplitPane使用方法详解

    swing分割窗口控件JSplitPane使用方法详解

    这篇文章主要为大家详细介绍了swing分割窗口控件JSplitPane的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11

最新评论