質問: 特定のunicode文字を含むコメント内でjavaコードを実行することが許可されるのはなぜですか? 次のコードは、「hello world!」という出力を生成します。 (いや、やってみよう).public static void main(string... args) { // the comment below is not a typo. // \u000d system.out.println("hello world!"); } これは、javaコンパイラがunicode文字\u000dを新しい行として解析し、次のように変換されるためです。public static void main(string... args) { // the comment below is not a typo. // system.out.println("hello world!"); } その結果、コメントは "実行"されます。これは悪意のあるコードや悪意のあるプログラマーが想像できるものを「隠す」ために使用される可能性があるので、 コメントで許可されるのはなぜ これがjava仕様で許可されているのはなぜですか?
回答: 私はこれが設計ミスであることに@zwolに同意します。しかし、私はそれについてさらに批判的です。\uエスケープは文字列および文字リテラルに役立ちます。それが存在すべき唯一の場所です。これは\nのような他のエスケープと同じように扱われるべきです。そして"\u000a" should は正確に"\n"を意味します。コメントに\uxxxxを付ける意味は全くありません - 誰もそれを読むことができません。同様に、プログラムの他の部分で\uxxxxを使用する意味はありません。唯一の例外は、いくつかの非ascii文字を含むように強制されているパブリックapiにおそらくあるでしょう。デザイナーは1995年に彼らの理由を持っていました、しかし20年後、これは間違った選択であるように見えます。 (読者への質問 - なぜこの質問は新しい投票を得続けますか?この質問はどこか人気のある場所からリンクされていますか?)