撇号和反斜杠+撇号之间的区别

时间:2013-07-03 17:13:57

标签: java

我不明白"'""\'"之间的区别。 也就是说,

public class test {
    public static void main(String[] args) {

        System.out.println("Hello, I'm the best!");
        System.out.println("Hello, I\'m the best!");
      }
}

给出相同的结果:

Hello, I'm the best!
Hello, I'm the best!

这是该语言的特色吗?或者可能有更复杂的描述? Android上有相同的结果吗?

2 个答案:

答案 0 :(得分:13)

对于字符串文字,'\'之间没有区别。但是对于字符文字,在Java中被'字符包围,转义是必要的。

'''   // Not a legal character literal for '
'\''  // A properly escaped character literal for '

根据JLS, Section 3.10.6,Java转义符用于字符串和字符文字,因此您可以在两种情况下使用它们。引自JLS链接:

  

字符和字符串转义序列允许表示   一些非图形字符以及单引号,双重   引号和字符文字中的反斜杠字符(§3.10.4)和   字符串文字(§3.10.5)。

据我所知,Android使用的是Java,所以我也希望Android能够使用Java。

答案 1 :(得分:1)

我只想补充一下rgettman的答案。

就像他说的那样,在这种背景下'\'之间没有区别。在使用反斜杠的情况下,'正在被转义,但它没有实际区别,因为在这种情况下不需要转义(编译器可以在没有帮助的情况下将内容与机箱区分开来)。

如果您尝试使用'作为字符,那么这很重要。例如:

char c = '''; //compile error
char c = '\''; //escaped correctly

同样适用于在String声明中转义双引号。例如:

String s = """; //compile error
String s = "\""; //escaped correctly

本质上,转义字符会告诉编译器将字符视为内容,否则它会完成封装,并且编译器认为在行的末尾有一个错误的字符。

现在把所有东西绑在一起,这很好用:

String s = "'";
char c = '"';

这是因为编译器可以区分'"以完成机箱。希望这能为其他人解决一些逃避问题。