2012-05-15 2 views
2

b가 다른 이유는 무엇입니까? 첫 번째 문자열에 \052는 하나의 진수 이스케이프 시퀀스로 해석 (그래서 \044입니다) 도착 때문에 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

그들은 다르다.

다음 두 문자열은 동일 비교합니까 :

String a = "BuildGUID10035\000528\000440"; 
String b = "BuildGUID10035" + '\0' + 528 + '\0' + 440; 

(내가 a\000으로 \0를 교체했습니다.)

1

\ 0 널 문자에 대한 자리 표시 자입니다. 그래서 첫 번째 문자열은 \ 052 ... \ 044로 해석됩니다. 두 번째는 BuildGUID10035 {NULL} 528 {NULL} 440

(분명히 NULL을 사용했음을 의미합니다 ...) 052 \

와 \ 044은 자신의 권리를 052 \

2

으로 해석 될 수 및 044 \ 문자의 진수 표현입니다. \와 3 자리로 시작하는 것은 8 진수 형식의 문자로 간주됩니다. 따라서 두 문자열은 동일하지 않습니다.

2

\ 3 자리 숫자 다음에 8 진수 이스케이프 시퀀스가 ​​표시됩니다. 그래서 문자열 a는 BuildGUID10035 * 8 $ 0이되어 문자열 b와 같지 않습니다.

관련 문제