这个Java字符串中的"\1"代表什么?

26
System.out.println("\1");

我认为它没有编译成功,是因为出现了未被识别的转义序列。

"\1" 到底代表什么意思?

2个回答

23

这是一个八进制转义序列,如JLS第3.10.6节中所列。例如:

String x = "\16";

等同于:

String x = "\u000E";

(作为八进制16 = 十六进制 E.)

所以\1代表U+0001,“标题开始”字符。

以我的经验,Java很少使用八进制转义序列,我个人尽可能避免使用它们。当我想要使用数字转义序列指定字符时,我总是使用\uxxxx


Java是那种让你在遇到它的“偶发”错误时大声咒骂的语言之一。你知道吗,Java将字符转义解释为源代码中的字面字符吗?这不是问题,直到你尝试转义回车符...然后Java会认为你在源代码中插入了一个换行符,而你实际上并不想要这个换行符。 - PP.
2
@PP:这取决于你指的是哪种字符转义。例如,// This \n is okay 的注释是可以的,但是 // This \u000a is not 就无法编译。 - Jon Skeet
你的第二行代码无法编译(至少在我的机器上):“字符串文字没有被双引号正确关闭”。 - sp00m
1
另外,由于Java没有原始字符串,因此在使用带有反向引用的正则表达式时需要使用\\1,这可能会非常令人烦恼。 - Eric Jablow
1
@Kevin:是的,但我不使用非ASCII标识符,在注释中我会使用U+000D或类似的东西。这两种情况都不是“我想使用数字转义序列指定字符”的情况。 - Jon Skeet
显示剩余3条评论

2
在Java中,它是以下值。
\u0001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接