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