Java 为什么我不';不需要在字符串声明中转义ASCII字符,如\037?

Java 为什么我不';不需要在字符串声明中转义ASCII字符,如\037?,java,Java,我知道“”是Java中的转义字符。所以我的理解是,每当我声明一个包含特殊字符的字符串时,我都需要用“”对其进行转义。例如: String backSlash = "\\"; 我必须为ascii字符\037创建一个字符串,显然我不需要用“”对其进行转义 为什么会这样?你在写一篇: 八进制数字由一个ASCII数字0和一个或多个ASCII数字0到7组成,中间穿插下划线,可以表示正整数、零整数或负整数 如果写为“037”,它稍后将被解释为“0”“3”“7”。您正在写一个: 八进制数

我知道“”是Java中的转义字符。所以我的理解是,每当我声明一个包含特殊字符的字符串时,我都需要用“”对其进行转义。例如:

String backSlash = "\\";
我必须为ascii字符\037创建一个字符串,显然我不需要用“”对其进行转义

为什么会这样?

你在写一篇:

八进制数字由一个ASCII数字0和一个或多个ASCII数字0到7组成,中间穿插下划线,可以表示正整数、零整数或负整数

如果写为“037”,它稍后将被解释为“0”“3”“7”。

您正在写一个:

八进制数字由一个ASCII数字0和一个或多个ASCII数字0到7组成,中间穿插下划线,可以表示正整数、零整数或负整数

如果写为“037”,它稍后将被解释为“0”“3”“7”

我的理解是,每当我声明一个包含特殊字符的字符串时,我都需要通过
“\”

您的理解是不完整的:Java字符串文本中的反斜杠
\
可以引入以下转义序列:

  • 特殊字符转义-这包括
    \b
    \t
    \n
    \f
    \r
    \'
    \“
    \
  • Unicode转义-以
    \u
    开头的序列,最多有四个十六进制数字
  • 八进制转义-以
    \
    开头的序列,八进制数介于0和3778之间,以0开头
您的示例具有第三种序列(八进制)

我的理解是,每当我声明一个包含特殊字符的字符串时,我都需要通过
“\”

您的理解是不完整的:Java字符串文本中的反斜杠
\
可以引入以下转义序列:

  • 特殊字符转义-这包括
    \b
    \t
    \n
    \f
    \r
    \'
    \“
    \
  • Unicode转义-以
    \u
    开头的序列,最多有四个十六进制数字
  • 八进制转义-以
    \
    开头的序列,八进制数介于0和3778之间,以0开头

您的示例具有第三种序列(八进制)。

转义反斜杠的目的是说“我不想要反斜杠的特殊含义;我想要一个实际的反斜杠”。如果要表示字符
\037
,则需要反斜杠的特殊含义,因此转义它完全不是您想要的。因此ASCII码\037不是文字\037?它在那里转义0?它在那里转义037成为八进制,而不是“0”“3”“7”。因此\赋予整个字符串八进制的含义。谢谢EJP,我不小心删除了我的upvote,很抱歉…@SkipableMe不,它会导致下一个字符被解释为文字零,从词汇上讲,它是八进制文字的开始。当八进制文字被使用时,字符串的其余部分将继续被处理。转义反斜杠的目的是说“我不想要反斜杠的特殊含义;我想要一个实际的反斜杠”。如果要表示字符
\037
,则需要反斜杠的特殊含义,因此转义它完全不是您想要的。因此ASCII码\037不是文字\037?它在那里转义0?它在那里转义037成为八进制,而不是“0”“3”“7”。因此\赋予整个字符串八进制的含义。谢谢EJP,我不小心删除了我的upvote,很抱歉…@SkipableMe不,它会导致下一个字符被解释为文字零,从词汇上讲,它是八进制文字的开始。当八进制文字被使用时,字符串的其余部分将继续被处理。如果省略反斜杠,它将被解释为三个字符“0”“3”“7”。@EJP True,我对隐藏代码有一个不同的想法:)更正。@请不要在这里发布clickbait,但是你有没有考虑过这是一个答案相同的问题?如果你省略了反斜杠,它将被解释为三个字符“0”“3”“7”。@EJP True,我对隐藏代码有一个不同的想法:)更正。@SkibleMe不要在这里发布clickbait,但是你有没有考虑过这是同一个问题,同一个答案的可能性?
String delimiter = "\037"; // enough                                   
String delimiter = "\\037"; // not needed and wrong