Java 소스 코드에서 \ u000d는 모든면에서 ASCII CR 문자와 동일합니다. 어디에서나 간단하고 끝이없는 줄입니다. 질문의 형식은 잘못된 것으로, 문자의 순서가 실제로 구문 상 일치하는 것은 다음과 같습니다. IMHO의 가장 정확한 답은 다음과 같습니다. 코드가 주석에 없기 때문에 코드가 실행됩니다. 다음 줄에 있습니다. Java에서 "주석에서 코드 실행"은 예상대로 허용되지 않습니다. 혼동의 대부분은 구문 하이 라이터와 IDE가이 상황을 고려할만큼 정교하지 않다는 사실에서 비롯됩니다. 그들은 유니 코드 이스케이프를 전혀 처리하지 않거나 javac 와 같이 이전 대신 코드를 구문 분석 한 후에 수행합니다. 그 이유는 Java 컴파일러가 유니 코드 문자 \u000d 를 새 줄로 구문 분석하여 \u000d 과 같이 변환하기 때문입니다. \u 이스케이프는 문자열 및 문자 리터럴에 유용합니다. 그것이 존재해야하는 유일한 장소입니다. \n 과 같은 다른 이스케이프와 같은 방식으로 처리해야합니다. "\u000A" 는 정확히 "\n" 의미 해야합니다 . 이것은 항상 Java 플랫폼의 핵심 목표였던 플랫폼 독립성 (지원되는 문자 세트의 독립성)을 근본적으로 보증합니다. 파일의 어느 곳에서나 유니 코드 문자를 작성할 수있는 기능은 깔끔한 기능이며, 특히 비 라틴 언어로 코드를 문서화 할 때 주석에서 중요합니다. 그것이 미묘한 방식으로 의미론을 방해 할 수 있다는 사실은 (불행한) 부작용입니다. 이 주제에는 많은 문제가 있으며 Joshua Bloch와 Neal Gafter의 Java Puzzlers 는 다음 변형을 포함했습니다. 더 진지하게,이 퍼즐은 이전 세 가지 교훈을 강화하는 데 도움이됩니다 . 유니 코드 이스케이프는 다른 방식으로 표현할 수없는 문자를 프로그램에 삽입해야 할 때 필수적입니다. 다른 모든 경우에는 피하십시오. 이에 대한 그럴듯한 이유는 전체 BMP를 Java 소스 코드의 가능한 문자로 허용하려는 요구가 있었기 때문입니다. 그래도 문제가 발생합니다. BMP 캐릭터를 합리적으로 쉽게 입력 할 수 있기를 원합니다. 이를 수행하는 방법은 유니 코드 이스케이프를 사용하는 것입니다. 쉬운 방법은 두 단계로 어휘를 수행하는 것입니다. 먼저 모든 유니 코드 이스케이프를 검색하고 나타내는 문자로 대체 한 다음 유니 코드 이스케이프가 존재하지 않는 것처럼 결과 문서를 구문 분석합니다. "코멘트에서 유니 코드 이스케이프를 원하는 사람"이라고 묻는 사람들에게는 필자가 모국어가 라틴 문자 집합을 사용하는 사람들이라고 생각합니다. 다시 말해, 사람들은 Java 프로그램에서 합법적 인 곳이면 어디에서나 일반적으로 주석과 문자열로 임의의 유니 코드 문자를 사용할 수 있다는 것이 원래 Java 디자인에 내재되어 있습니다. 이러한 프로그램이 유니 코드 이스케이프를 해석 할 수없고 해당 글리프를 표시 할 수 없다는 소스 텍스트를 보는 데 사용되는 IDE (예 : IDE)와 같은 프로그램의 단점 일 수 있습니다. 그 뒤에 숨겨진 아이디어는 다른 문자 인코딩간에 Java 소스 코드를 무손실로 변환 할 수 있다는 것입니다. 오늘날 유니 코드 지원은 널리 보급되어 있지만 문제처럼 보이지는 않지만 서구의 개발자가 아시아 문자를 포함하는 아시아 동료로부터 소스 코드를 수신하는 것은 쉽지 않았습니다. (컴파일 및 테스트 포함) 결과를 손상시키지 않고 다시 전송합니다. 따라서 Java 소스 코드는 모든 인코딩으로 작성 될 수 있으며 식별자, 문자 및 String 리터럴 및 주석 내의 광범위한 문자를 허용합니다. 그런 다음 무손실로 전송하기 위해 대상 인코딩에서 지원하지 않는 모든 문자는 유니 코드 이스케이프로 대체됩니다. 이것은 뒤집을 수있는 프로세스이며 흥미로운 점은 변환 규칙이 종속되지 않기 때문에 Java 소스 코드 구문에 대해 아무것도 알 필요가없는 도구로 변환을 수행 할 수 있다는 것입니다. 이것은 컴파일러 내부의 실제 유니 코드 문자로의 변환으로 Java 소스 코드 구문과 독립적으로 발생합니다. 소스 코드의 의미를 변경하지 않고 양방향으로 임의의 수의 변환 단계를 수행 할 수 있음을 의미합니다. 컴파일러는 프로그램을 토큰으로 구문 분석하기 전에 유니 코드 이스케이프를 나타내는 문자로 변환 할뿐만 아니라 주석과 공백을 삭제하기 전에 변환합니다. 이 프로그램에는 유일한 주석에 단일 유니 코드 이스케이프 (\ u000d)가 포함되어 있습니다. 주석에서 알 수 있듯이이 이스케이프는 줄 바꿈 문자를 나타내며, 컴파일러 는 주석을 삭제하기 전에 이를 올바르게 변환합니다. 이것은 플랫폼에 따라 다릅니다. UNIX와 같은 특정 플랫폼에서는 작동합니다. Windows와 같은 다른 사람들에게는 그렇지 않습니다. 출력은 육안과 동일하게 보일 수 있지만 파일에 저장되거나 후속 처리를 위해 다른 프로그램으로 파이프되는 경우 쉽게 문제를 일으킬 수 있습니다. \u 이스케이프는 프로그램이 토큰 화 되기 전에 \u 이스케이프가 해당 유니 코드 문자로 균일하게 변환되므로 주석을 종료합니다. // 대신 \u0057\u0057 사용하여 주석을 시작할 수 있습니다. 나는이 특정 디자인 오류를 만들기가 쉽다는 것을 설명하기 위해 이것을 가져 왔고, 토큰 화에 대해 생각하고 컴파일러 프로그래머가 생각하는 방식을 파싱하는 데 익숙하다면 오류를 수정하기에 너무 늦을 때까지 오류라는 것을 깨닫지 못합니다. 토큰 화 및 파싱에 대해 기본적으로 공식 문법을 이미 정의한 경우 누군가 문법적인 특수 사례 (예 : 3 부작, 백 슬래시-줄 바꿈, ASCII로 제한되는 소스 파일에서 임의의 유니 코드 문자를 인코딩하는 등 무엇이든 포함해야 함)를 작성하는 것이 더 쉽습니다. 토크 나이저 앞에 변형 패스 를 추가하여 토크 나이저를 재정 의하여 특수한 경우를 사용하는 것이 적절한 곳에주의를 기울이십시오. 1 pedants : 나는 C의이 측면이 100 % 의도적이라는 것을 알고있다. 나는 이것을 근거로하지 않았다. 이것은 임의의 긴 라인을 가진 코드를 펀치 카드에 기계적으로 강제로 맞출 수 있다는 것을 알고있다. 여전히 잘못된 디자인 결정이었습니다.