每日一技——Java 利用 unicode 编码执行代码
首先来看看下面的代码,简单到 main
方法中只有一行注释。
1 |
|
然而,这段代码在运行后会输出:
1 |
|
那么这究竟是怎么回事呢?
其实原理就在于大家熟悉的 unicode
编码,上面的 \u000d
就是一个 unicode
转义字符,它所表示的是一个换行符。而 java 中的编译器,不仅会编译代码,还会解析 unicode
编码将它替换成对应的字符。所以说,上面的代码解析完后实际是这样的:
1 |
|
这样,就能解释为什么能够执行注释中的语句了。
当然,你也可以把代码写成以下这个样子:
1 |
|
执行结果会打印 2
,同理,因为后面的unicode
编码的转义后表示的是a++;
。
你这么写的话客户如果懂点代码,看一下就穿帮了啊,但是你如果写成下面这样,大部分估计都以为这是一段乱码:
1 |
|
这个代码没个几十年的功力真看不出来这里执行的是sleep
,简直完美。
每日一技——Java 利用 unicode 编码执行代码
https://zuanshifengling.github.io/2023/编程/Java/每日一技——Java利用unicode编码执行代码/