为什么与b不同?带有 0的字符串在Java中表现怪异
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));
为什么与b不同?带有 0的字符串在Java中表现怪异
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;
(我已经与\000
在a
取代了\0
。)
\ 0是空字符占位符。所以第一个字符串被解释为\ 052 ... \ 044,其中第二个是BuildGUID10035 {NULL} 528 {NULL} 440
(很明显,我用NULL作为我的意思是一个例子...)
\ 052和\ 044会在自己的权利
\ 052进行解释和\ 044是字符的八进制表示。任何以\和三位数开头的字符都被认为是八进制形式的字符。因此,两个字符串不相等。
\后跟3位数字表示八进制转义序列。因此,字符串a变成BuildGUID10035 * 8 $ 0,因此不等于字符串b。
有关Java中字符转义的参考,请参阅http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.6 – erikxiv