2012-05-15 17 views
2

为什么与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)); 
+1

有关Java中字符转义的参考,请参阅http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.6 – erikxiv

回答

10

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

以下两个字符串不相等的比较:

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

(我已经与\000a取代了\0。)

1

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

(很明显,我用NULL作为我的意思是一个例子...)

\ 052和\ 044会在自己的权利

2

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

2

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