带有\ 0的字符串在Java中表现得很奇怪

时间:2012-05-15 15:00:27

标签: java string null-terminated

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

4 个答案:

答案 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将自行解释