Java 注释也会被执行?
Java 大约 1428 字代码
public class Comment {
public static void main(String[] args) {
String str = "你好世界";
// \u000dstr="Hello World";
System.out.println(str);
}
}
输出:
Hello World
原因
查看反编译.class
后的代码。发现编译器将\u000d
后的注释换了一行,发现是\u000d
对应的是Unicode
中的换行符,即\r
。因为Java
支持Unicode
进行编码(毫无可读性可言),所以编译器再处理Unicode
时先转换字符。
public class Comment {
public Comment() {
}
public static void main(String[] args) {
String str = "你好世界";
str = "Hello World";
System.out.println(str);
}
}
延伸
虽然以下代码在IDEA
中会提示错误信息:Cannot resolve symbol 'u000d'
,但不影响正常执行。
public static void main(String[] args) {
System.out.println(\u000d);
System.out.println('\u03C0');
double π = Math.PI;
System.out.println(\u03C0);
}
输出以下信息,发现变量π
,可以用Unicode
码中的\u03c0
代替并正常输出Math.PI
的值。
π
3.141592653589793
注意
将注释中的变量名str
改为str2
,编译时将得到以下错误信息:
Error:(8, 18) java: 找不到符号
符号: 变量 str2
位置: 类 Comment
结论
Java
中的注释是肯定不会被执行的,只是编译器识别了\u000d
转换成了换行符,将注释拆成了两句语句。
相关类
JDK
的lib
包下的tools.jar
。IDEA
可以在Project Structure
中的Libraries
中添加。
com.sun.tools.javac.parser.UnicodeReader
com.sun.tools.javac.parser.JavacParser
完整代码
public class Comment {
public static void main(String[] args) {
String str = "你好世界";
// \u000dstr="Hello World";
System.out.println(str);
System.out.println(\u000d);
System.out.println('\u03C0');
double π = Math.PI;
System.out.println(\u03C0);
}
}
阅读 2261 · 发布于 2020-05-05
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Java 语法糖 - try with resource阅读 1007
-
Spring Boot Thymeleaf URL 链接阅读 182
-
JMeter 设置统一请求地址阅读 1816
-
JavaScript Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture.阅读 6383
-
软考大纲:系统架构设计师阅读 1241
-
Java 并发编程之 Phaser阅读 2799
-
Spring Boot 启动后首次请求比较慢阅读 3242
-
OpenResty 中使用 lua-resty-woothee 解析 User-Agent阅读 5202
-
Linux 之 CentOS yum 安装 Redis阅读 1453
-
JMeter 记录 Cookie 保持登录状态阅读 2690