大家好,我是杨仔(以前大家都这样叫我^^)。
什么,你说java代码被注释了就不会被执行?
package com.xx;
import org.junit.Test;
public class EnterTest {
@Test
public void test() {
String a = "1";
// \u000d a="2";
System.out.println(a);
}
}
猜想一下这段代码会输出什么呢?
运行一下:
再来看看这段代码,你会不会认为它是一个空方法?
package com.xx;
public class UnicodeTest {
public static void main(String[] args) {
// \u000d \u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0022\u0031\u0032\u0033\u0022\u0029\u003b
}
}
运行一下:
是不是感觉见鬼了?
问题就出在了 \u000d 等Unicode上面了,\u000d等看上去就知道是一个Unicode字符,\u000d转换十进制以后发现它代表一个换行符,直接效果就是引起注释逃逸!
那么这个时候答案就出来了,Java的编译器不仅会去编译代码, 也会去解析Unicode字符。
上面两段代码转换为代码就是:
和
总结:java的编译器不仅会去编译代码,也会去解析Unicode字符;
【文本与Unicode互转】 https://tool.chinaz.com/tools/unicode.aspx