Unicode解码发生在任何其他词汇翻译之前.这样做的主要好处是,它使得在ASCII和任何其他编码之间来回切换变得非常简单.你甚至不需要弄清楚 comments 的开始和结束!
如JLS Section 3.3所述,这允许任何基于ASCII的工具处理源文件:
[...] Java编程语言指定了一种将Unicode编写的程序转换为ASCII的标准方法,该方法可以将程序转换为可由基于ASCII的工具处理的形式.[...]
这为平台独立性(支持的字符集的独立性)提供了基本保证,而平台独立性一直是Java平台的关键目标.
能够在文件中的任意位置写入任何Unicode字符是一项简洁的功能,在用非拉丁语言记录代码时,在注释中尤其重要.它可以以如此微妙的方式干扰语义,这只是一个(不幸的)副作用.
关于这一主题,有很多gotchas,Joshua Bloch和Neal Gafter的Java Puzzlers篇文章包括以下变体:
这是合法的Java程序吗?如果是,它会打印什么?
\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d
(这个程序原来是一个普通的"Hello World"程序.)
在解决这个难题时,他们指出了以下几点:
更严重的是,这个谜题强化了前三个谜题的教训:Unicode escapes are essential when you need to insert characters that can’t be represented in any other way into your program. Avoid them in all other cases.
资料来源:Java: Executing code in comments?!