【问题标题】: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 将被单独解释

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          • 2017-08-07
          • 1970-01-01
          • 1970-01-01
          • 2013-08-29
          • 1970-01-01
          相关资源
          最近更新 更多