2012-05-15 1 views
2

Почему это не так?Строки с 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; 

(я заменил \0 с \000 в a.)

1

\ 0 является заполнителем для нулевого символа. Таким образом, первая строка интерпретируется как \ 052 ... \ 044, где в качестве второго является BuildGUID10035 {NULL} 528 {NULL} 440

(Очевидно, я использовал NULL в качестве примера того, что я имею в виду ...)

\ 052 и \ 044 будет интерпретирована в их собственном праве

2

\ 052 и \ 044 являются восьмеричные представления символов. Все, начиная с \ и трех цифр, рассматривается как восьмеричные формы символов. Следовательно, две строки не равны.

2

\ затем 3 цифры представляют собой восьмеричную escape-последовательность. Таким образом, строка a становится BuildGUID10035 * 8 $ 0 и не равна строке b.