【问题标题】:Strings with \0 behave weird in Java带有 \0 的字符串在 Java 中的行为很奇怪
【发布时间】:2012-05-15 15:00:27
【问题描述】:
为什么 a 与 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));
【问题讨论】:
标签:
java
string
null-terminated
【解决方案1】:
它们是不同的,因为在第一个字符串中,\052 被解释为单个八进制转义序列(\044 也是如此)。
以下两个字符串确实比较相等:
String a = "BuildGUID10035\000528\000440";
String b = "BuildGUID10035" + '\0' + 528 + '\0' + 440;
(我已将a 中的\000 替换为\0。)
【解决方案2】:
\052 和 \044 是字符的八进制表示。以 \ 和三个数字开头的任何内容都被视为字符的八进制形式。因此,两个字符串不相等。
【解决方案3】:
\ 后跟 3 位数字表示八进制转义序列。所以,字符串 a 变成 BuildGUID10035*8$0 an 所以不等于字符串 b。
【解决方案4】:
\0 是空字符的占位符。所以第一个字符串被解释为 \052 ... \044 其中第二个是 BuildGUID10035{NULL}528{NULL}440
(显然我已经使用 NULL 作为我的意思的例子......)
\052 和 \044 将被单独解释