前几天,有人问我关于这个程序的输出:的Unicode逃逸行为
public static void main(String[] args) {
// \u0022 is the Unicode escape for double quote (")
System.out.println("a\u0022.length() + \u0022b".length());
}
我首先想到的是这个程序应该打印a\u0022.length() + \u0022b
长度,这是16
,但奇怪的是,它印2
。我知道\u0022
是"
的Unicode,但我认为这"
将被转义并且仅代表一个"
文字,没有特别的含义。而在现实中,Java的莫名其妙解析这个字符串如下:
System.out.println("a".length() + "b".length());
我不能换我的头周围这个怪异的行为,为什么Unicode转义字符不表现为正常的转义序列?
更新显然,这是Joshua Bloch和Neal Gafter编写的Java Puzzlers: Traps, Pitfalls, and Corner Cases书的脑筋急转弯之一。更具体地说,这个问题涉及到拼图14:逃避路途。
http://www.javajee.com/unicode-escapes-in-java – ShrtTth