2

为什么 a 与 b 不同?

    String a = "BuildGUID10035\0528\0440";
    String b = "BuildGUID10035" + '\0' + 528  + '\0' + 440;

    System.out.println("A: " + a);
    System.out.println("B: " + b);
    System.out.println(a.equals(b));
4

4 回答 4

10

它们是不同的,因为在第一个字符串中,\052被解释为单个八进制转义序列(也是如此\044)。

以下两个字符串确实比较相等:

String a = "BuildGUID10035\000528\000440";
String b = "BuildGUID10035" + '\0' + 528  + '\0' + 440;

(我已经\0\000in替换了a。)

于 2012-05-15T15:01:50.163 回答
2

\052 和 \044 是字符的八进制表示。以 \ 和三个数字开头的任何内容都被视为字符的八进制形式。因此,两个字符串不相等。

于 2012-05-15T15:11:39.597 回答
2

\ 后跟 3 位数字表示八进制转义序列。因此,字符串 a 变为 BuildGUID10035*8$0 an 因此不等于字符串 b。

于 2012-05-15T16:17:05.430 回答
1

\0 是空字符的占位符。所以第一个字符串被解释为 \052 ... \044 其中第二个是 BuildGUID10035{NULL}528{NULL}440

(显然我用 NULL 作为我的意思的一个例子......)

\052 和 \044 将被单独解释

于 2012-05-15T15:04:15.880 回答