以下代码生成输出"Hello World!" (不,真的,试试吧).
public static void main(String... args) {
// The comment below is not a typo.
// \u000d System.out.println("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)
原因是Java编译器将Unicode字符解析\u000d为新行并转换为:
public static void main(String... args) {
// The comment below is not a typo.
//
System.out.println("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)
从而导致评论被"执行".
由于这可以用来"隐藏"恶意代码或恶意程序员可以设想的任何东西,为什么在评论中允许它?
为什么Java规范允许这样做?
Java类名中有哪些字符有效?还有哪些其他规则管理Java类名称(例如,Java类名称不能以数字开头)?
选择三个正确的答案(有效的声明)。
(一种) char a = '\u0061';
(b) char 'a' = 'a';
(C) char \u0061 = 'a';
(d) ch\u0061r a = 'a';
(e) ch'a'r a = 'a';
答案:(a),(c)和(d)
书:
Java SCJP认证程序员指南(第三版)
有人可以解释一下选项(c)和(d)的原因吗,因为IDE(IntelliJ IDEA)用红色的文字显示了它:
无法解析符号“ u0063”
我想检查字符串是否包含受限符号(®).截至目前,我这样做:
if(mystr.contains("®"))
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但我真的不认为在实际代码中使用受限制的符号是最好的方法.检查字符串是否包含受限符号的另一种方法是什么?
一直在到处寻找,但找不到答案。如果我没有记错的话,它一定与“utf-8”有关,但仍然不知道它是什么。