注释是一种不由编译器或解释器执行的语句,但在编译器中对程序进行词法转换之前,程序的内容被编码为ASCII,以便于处理。考虑这个项目:
null
class Main{ public static void main(String[] args) { // The comment below is magic.. // u000d System.out.println("Geek Comment Executed!"); } } |
此代码将被成功执行和编译以生成输出。 输出
Geek Comment Executed!
这成功地产生了这个输出,因为java编译器在词法转换之前将Unicode字符u000d解析为新行,程序被转换为:
class Main{ public static void main(String[] args) { // The comment below is magic // System.out.println( "Geek Comment Executed!" ); } } |
Unicode字符将print语句移到下一行,然后像普通java程序一样执行。因此,问题出现了,为什么Unicode转义的翻译会在任何其他源代码处理之前发生?
1.Java源代码可以用任何编码编写,这种编码允许字符串、文字和注释中的大量字符。 1.它使基于ASCII的工具更容易处理。 2.这保证了java平台依赖性,即独立于支持的字符集。 3.这有助于用非拉丁语记录代码。
能够在文件中的任意位置写入任何Unicode字符是一个不错的特性,但它可以以如此微妙的方式干扰语义,这只是一个副作用。
让我们考虑一下这个java程序:
u0070u0075u0062u006cu0069u0063u0020u0020u0020u0020 u0063u006cu0061u0073u0073u0020u0055u0067u006cu0079 u007bu0070u0075u0062u006cu0069u0063u0020u0020u0020 u0020u0020u0020u0020u0073u0074u0061u0074u0069u0063 u0076u006fu0069u0064u0020u006du0061u0069u006eu0028 u0053u0074u0072u0069u006eu0067u005bu005du0020u0020 u0020u0020u0020u0020u0061u0072u0067u0073u0029u007b u0053u0079u0073u0074u0065u006du002eu006fu0075u0074 u002eu0070u0072u0069u006eu0074u006cu006eu0028u0020 u0022u0048u0065u006cu006cu006fu0020u0077u0022u002b u0022u006fu0072u006cu0064u0022u0029u003bu007du007d |
输出:
Hello World
此unicode程序将转换为其代表值,以生成“Hello World” 参考 – https://stackoverflow.com/questions/30727515/why-is-executing-java-code-in-comments-with-certain-unicode-characters-allowed?newsletter=1&nlcode=222379%7C1266
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END