2012-05-15 24 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。