我正在学习Java,而且我正在阅读有关hex String literals的书籍章节。它告诉我,我可以用这种格式创建一个十六进制字符串文字:“\ uxxxx”。所以我尝试了这个:
char c = '\u0010';
int x = c;
System.out.println(x); // prints 16.
首先,为什么以下十六进制字符串文字会导致编译错误?我期待十六进制中的'a'等于十进制10。
char c = '\u000a';
返回以下错误:
..\src\pkgs\main\Main.java:360: error: illegal line end in character literal
char c = '\u000a';
其次,由于我的新手Java状态,我目前无法理解使用的是十六进制字符串文字。我为什么要使用一个?有人可以请我提供他们使用的“真实世界”示例吗?非常感谢。
答案 0 :(得分:7)
编译器发出错误的事实是因为编译器会将\u000a
解析为CR
char A = '\u000A';
因此变成......
char A ='
';
导致编译时错误。要避免此错误,请始终使用特殊转义字符'\n'
(换行符)和'\r'
(回车)。
答案 1 :(得分:2)
如前所述,Unicode转义实际上是processed during compilation as a replacement:
因为非常早地处理Unicode转义,所以为值为换行符(LF)的字符文字写'\ u000a'是不正确的。 Unicode转义\ u000a在转换步骤1(§3.3)中转换为实际换行符,换行符在步骤2(§3.4)中成为LineTerminator,因此字符文字在步骤3中无效。相反,应该使用转义序列'\ n'(§3.10.6)。同样,为值为回车(CR)的字符文字写'\ u000d'是不正确的。相反,请使用'\ r'。
Unicode转义的这个方面不仅限于字符文字。例如,以下内容将打印“hello world”:
// \u000A System.out.println("hello world");
获取转义之外的特殊字符的另一种方法是使用整数文字:
static final char NUL = 0x0000;
至于它们的用处,因为否则你必须复制和粘贴特殊字符或用某些键盘组合键入它们。另一个原因是某些角色没有合适的视觉表现。例如null,escape,backspace和delete。还有代码点7,铃声字符,它实际上是计算机在打印时发出蜂鸣声的指令。
答案 2 :(得分:0)
Java中的Char为2个字节,因此您可以使用char打印Unicode字符。 因此,如果您知道unicode字符代码,那么您可以将其存储为char中的十六进制文字,并且您可以使用其他语言字符。
您可以访问此链接: http://voices.yahoo.com/how-print-unicode-characters-java-12507717.html
了解十六进制文字的使用