其他
老师,你确定Java注释不会被执行吗?
The following article is from 沉默王二 Author 沉默王二
public static void main(String[] args) {
String name = "沉默王二";
// \u000dname="沉默王三";
System.out.println(name);
}
}
\u000d
,如果不是它在作怪,把 name 的值由“沉默王二”修改为了“沉默王三”,就没有别的原因了——没别的,凭借多年的工作经验,找问题的根源我还是很得心应手的。\u000d
虽然看上去比较陌生,但我知道它是一个 Unicode 字符。问了一下搜索引擎后,知道它代表一个换行符——一种恍然大悟的感觉啊。我知道,Java 编译器不仅会编译代码,还会解析 Unicode 字符。// access flags 0x21
public class com/cmower/dzone/secret/Test {
// compiled from: Test.java
// access flags 0x1
public <init>()V
L0
LINENUMBER 3 L0
ALOAD 0
INVOKESPECIAL java/lang/Object.<init> ()V
RETURN
L1
LOCALVARIABLE this Lcom/cmower/dzone/secret/Test; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
// access flags 0x9
public static main([Ljava/lang/String;)V
L0
LINENUMBER 5 L0
LDC "\u6c89\u9ed8\u738b\u4e8c"
ASTORE 1
L1
LINENUMBER 6 L1
LDC "\u6c89\u9ed8\u738b\u4e09"
ASTORE 1
L2
LINENUMBER 7 L2
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
ALOAD 1
INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
L3
LINENUMBER 8 L3
RETURN
L4
LOCALVARIABLE args [Ljava/lang/String; L0 L4 0
LOCALVARIABLE name Ljava/lang/String; L1 L4 1
MAXSTACK = 2
MAXLOCALS = 2
}
public Test() {
}
public static void main(String[] args) {
String name = "沉默王二";
name = "沉默王三";
System.out.println(name);
}
}
//
真的不见了,这可以确定一点——注释确实是不会执行的。只不过 \u000d
把 name="沉默王三";
挤到了 //
注释的下一行,就好像下面这段代码的样子:public static void main(String[] args) {
String name = "沉默王二";
//
name="沉默王三";
System.out.println(name);
}
}
因为通过允许 Java 源代码包含 Unicode 字符,可以确保在世界上任何一个区域编写的代码在其他地方执行。
System.out.println(\u03C0);
π
这个字符怎么敲出来,那么他就可以选择使用 \u03C0
来替代——编译器知道 \u03C0
就是 π
这个变量(编译器会在编译其他代码之前先解析 Unicode 字符)。\u000d
是一种例外吧。\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
javac Ugly.java
,再执行 java Ugly
命令就可以看到程序结果了:【END】
今日精彩
B 站看开源
今天,当我们已经很习惯于用 Google、百度搜索、用 Kindle 阅读、用淘宝剁手、用 QQ、微信聊天时,很多人并不知道,支撑这些软件和服务的是后台成千上万的 Linux 服务器。超级计算机、大数据、无线电、移动互联网,离开了 Linux,一个能打的都没有。
今天,CSDN 就跟大家聊聊开源的历史。
点击上方小程序或「阅读原文」,直达完整版无广告视频,如果你觉得受益,请多多在看转发哟ღ( ´・ᴗ・` )比心!