一、问题背景

博主最近在研究Java的正则表达式,但Java的正则表达式涉及到很多\1\0\\1的写法,这些写法的含义既有正则表达式的含义,也有八进制转义序列表示字符的含义。因此博主李同学写了这篇文章用来详细区分这些字符间的区别和联系。

二、Java中各种进制数和转义字符的表示方法

1. 二进制数表示法

二进制的整数以 0b 或 0B 开头是因为字母B全称为Binary /ˈbaɪnəri/ adj/n二进制(的),如0B1011

2.八进制数表示法

八进制的整数以 0 开头 是因为数字0长得像英文单词octal的首字母o,而英文前缀oct-是第八的意思,其中octal /'ɒkt(ə)l/ adj/n八进制(的),如07654

3.十六进制数表示法

十六进制的整数以 0x 或者 0X 开头是因为字母X全称为hexadecimal /heksəˈdesɪml/ adj/n十六进制(的),其中十六进制数中有字母a-f是因为在十六进制里面,数字10~15分别用字母a-f表示,如0xa3f4

4.十六进制编码方式表示字符

字符型值也可以采用十六进制编码方式来表示,范围是’\u0000’~’\uFFFF’, 一共可以表示 65536 个字符,其中前 256 个 (’\u0000’ ~ ‘\u00FF’) 字符和8位ASCII码中的字符完全重合。当用十六进制编码方式(’\u0000’~’\uFFFF’)表示一个字符时,如果\u后面的4个符号中高位有若干个0,这些0是不可以省略的,如\u0003如果写成\u3在IDE中是会报错的。

5.八进制转义序列表示字符

字符型值还可以采用八进制转义序列来表示,范围是’\000’~’\377’, 一共可以表示256个字符,其中前 256 个 (’\000’ ~ ‘\377’) 字符和8位ASCII码中的字符完全重合。当用八进制转义序列(’\000’~’\377’)表示一个字符时,如果\后面的3个符号中高位有若干个0,这些0是可以省略的,如\003可以写成\3

由下面代码可得:八进制转义序列表示的前256个 (’\000’ ~ ‘\377’) 字符和8位ASCII码中的字符完全重合。

System.out.println('\0'=='\u0000');//输出true,因此'\0'和'\u0000'都表示ASCII码中第一个字符:空字符
        System.out.println('\377'=='\u00ff');//输出true

三、Java中0'0''\0''\u0000'"0"的区别

  1. 0代表int整形数0
  2. '0'代表char字符型字符'0',对应ASCII码值为\u0030 (也就是十进制 48)。
  3. '\0'代表用八进制转义序列表示的空字符(转义字符)【输出为空】,对应ASCII码值为\u0000
  4. '\u0000'代表十六进制编码方式表示的空字符(转义字符)【输出为空】,对应ASCII码值为\u0000
  5. "0"代表一个字符串,字符串中含有1个字符'0'