为什么 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));
为什么 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));
它们是不同的,因为在第一个字符串中,\052
被解释为单个八进制转义序列(也是如此\044
)。
以下两个字符串确实比较相等:
String a = "BuildGUID10035\000528\000440";
String b = "BuildGUID10035" + '\0' + 528 + '\0' + 440;
(我已经\0
用\000
in替换了a
。)
\052 和 \044 是字符的八进制表示。以 \ 和三个数字开头的任何内容都被视为字符的八进制形式。因此,两个字符串不相等。
\ 后跟 3 位数字表示八进制转义序列。因此,字符串 a 变为 BuildGUID10035*8$0 an 因此不等于字符串 b。
\0 是空字符的占位符。所以第一个字符串被解释为 \052 ... \044 其中第二个是 BuildGUID10035{NULL}528{NULL}440
(显然我用 NULL 作为我的意思的一个例子......)
\052 和 \044 将被单独解释