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);
이상은 본문의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있는 동시에 저희를 많이 지지해 주시기 바랍니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.