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

Sch*_*fty 2 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));
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 10

它们是不同的,因为在第一个字符串中,\052被解释为单个八进制转义序列(也是如此\044).

以下两个字符串确实比较相等:

String a = "BuildGUID10035\000528\000440";
String b = "BuildGUID10035" + '\0' + 528  + '\0' + 440;
Run Code Online (Sandbox Code Playgroud)

(我把它换成了\0\000a).