java에서 이스케이프 문자에 대한 버그

자바에서 정의할 수 있습니다

char c = '\u4f60';
char m = '\u0045';
char e = '\u554a';
이러한 글꼴(예:System.out.println("\u535a\u5ba2\u56ed");이런 코드는 어떤 인코딩 환경에서도 중국어 난자 문제가 발생하지 않는다
하지만 당신은 이런 글자의 양을 정의할 수 없습니다.

char c = '\u000a';
char m = '\u0027';
이것은\u000a와\u0027이 특수 이스케이프 문자이기 때문에 자바는 문자열 글꼴 상수에 있는 유니코드 이스케이프 문자에 대해 특별한 처리를 제공하지 않습니다.프로그램은 원래 문자에 따라 표시된 문자로 직접 변환됩니다[JLS 3.2].
\u000a는 LineFeed, 즉 줄 바꿈으로 컴파일됩니다.

char c = '
';
당연히 컴파일이 틀렸어요.
또 다른 예는 다음과 같습니다.System.out.println("a\u0022.length()+\u0022b".length());   이 프로그램에 대한 천박한 분석은 26을 출력해야 한다고 생각할 것이다. 조금만 깊이 있게 분석하면 16을 출력해야 한다고 생각할 것이다. 만약 당신이 실제로 한 번 실행한다면 결과는 26도 16도 아닌 2가 될 것이다.
왜냐하면,\u0022는 더블 인용부호의 전의자이기 때문에, 프로그램은 최종적으로

String str = "a".length()+"b";
System.out.println(str.length()); 
이 사례를 토대로 제가 예를 하나 썼는데, 여러분은 실행 시도 결과를 실행할 수 있습니다

String str = "\u0061\u0022\u002b\u0028\u006e\u0065\u0077\u0020\u006a\u0061\u0076\u0061\u002e\u0075\u0074\u0069\u006c\u002e\u0063\u006f\u006e\u0063\u0075\u0072\u0072\u0065\u006e\u0074\u002e\u0043\u0061\u006c\u006c\u0061\u0062\u006c\u0065<\u0056\u006f\u0069\u0064>\u0028\u0029\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0056\u006f\u0069\u0064\u0020\u0063\u0061\u006c\u006c\u0028\u0029\u007b\u0074\u0068\u0072\u006f\u0077\u0020\u006e\u0065\u0077\u0020\u0052\u0075\u006e\u0074\u0069\u006d\u0065\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0028\u0022\u0073\u0075\u0070\u0072\u0069\u0073\u0065\u0020\u006d\u0061\u0074\u0068\u0065\u0072\u0020\u0066\u0075\u0063\u006b\u0065\u0072\u0021\u0022\u0029\u003b\u007d\u007d\u0029\u002e\u0063\u0061\u006c\u006c\u0028\u0029\u002b\u0022";
System.out.println(str);
이상은 본문의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있는 동시에 저희를 많이 지지해 주시기 바랍니다!

좋은 웹페이지 즐겨찾기