我正在学习Java,而且我正在阅读关于hex String literals的书籍章节.它告诉我,我可以用这种格式创建一个十六进制字符串文字:"\ uxxxx".所以我尝试了这个:
char c = '\u0010';
int x = c;
System.out.println(x); // prints 16.
Run Code Online (Sandbox Code Playgroud)
首先,为什么以下的十六进制字符串文字会导致编译错误?我期待十六进制中的'a'等于十进制10.
char c = '\u000a';
Run Code Online (Sandbox Code Playgroud)
返回以下错误:
..\src\pkgs\main\Main.java:360: error: illegal line end in character literal
char c = '\u000a';
Run Code Online (Sandbox Code Playgroud)
其次,由于我的新手Java状态,我目前无法理解使用的是十六进制字符串文字.我为什么要使用一个?有人可以请我提供他们使用的"真实世界"示例吗?非常感谢.
编译器发出错误的事实是因为编译器将解析\u000atoCR
char A = '\u000A';
Run Code Online (Sandbox Code Playgroud)
因此变成......
char A ='
';
Run Code Online (Sandbox Code Playgroud)
这会导致编译时错误.要避免此错误,请始终使用特殊转义字符'\n'(换行符)和'\r'(回车符).
如前所述,Unicode 转义实际上是在编译期间作为替换进行处理的:
\n\n\n\n\n因为 Unicode 转义处理很早,所以对于值为换行符 (LF) 的字符文字,编写 \'\\u000a\' 是不正确的;Unicode 转义 \\u000a 在翻译步骤 1 (\xc2\xa73.3) 中转换为实际换行符,并且换行符在步骤 2 (\xc2\xa73.4) 中变为 LineTerminator,因此字符文字无效在步骤 3 中。相反,应该使用转义序列 \'\\n\' (\xc2\xa73.10.6)。同样,对于值为回车符 (CR) 的字符文字,写入 \'\\u000d\' 也是不正确的。相反,请使用 \'\\r\'。
\n
Unicode 转义的这个方面不仅仅限于字符文字。例如,以下内容将打印“hello world”:
\n\n// \\u000A System.out.println("hello world");\nRun Code Online (Sandbox Code Playgroud)\n\n获取转义之外的特殊字符的另一种方法是使用整数文字:
\n\nstatic final char NUL = 0x0000;\nRun Code Online (Sandbox Code Playgroud)\n\n至于它们的用处,一方面是因为否则您必须复制并粘贴特殊字符或使用某种键盘组合输入它们。另一个原因是某些字符没有正确的视觉表示。此类示例包括 null、转义、退格和删除。还有代码点 7,即响铃字符,它实际上是计算机在打印时发出蜂鸣声的指令。
\n| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |