重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Java初心者です。

コメントアウトされた中のエスケープシーケンスの使い方について質問があります。

class sample{
public static void main(String args[]){
System.out.println("16進数 :\u0001")
// System.out.println("16真数 :\ugggg")
}
}
上記のようなソースコードがあった場合、
System.out.println("16進数 :\u0001")
については、当然Unicodeの16進数範囲内なので、
コンパイルエラーにならないのですが、
コメントアウトされている行
// System.out.println("16真数 :\ugggg")
については、
コンパイルエラーになります。
エラーメッセージは「エスケープシーケンスが不正です。」

コメントアウトされているので、この行は無視されるものだと思っていたのですが、コンパイルエラーになるのは何故でしょうか。

どうかご教授願います。

A 回答 (3件)

>おそらく、そのためにユニコードのエスケープシーケンスに関してのみは、コメント内であってもコードが16進数の範囲外だとエラーになってしまうのでしょう。



あっていますよ。試しに、\uggggを\u000Aに変えてみてください。
今度は「ダブルクォートが閉じていないよ」(意訳)とエラーが出ると思います。
\u000Aは改行なので、こういったことになります。
逆に、↓はコンパイルエラーになりそうですが、正常に動作します。

public class A {
public static void main(String[] args) {
System.out.print(
// "\u000A"Test");
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます!
解決できました!

お礼日時:2007/11/11 13:24

// System.out.println("16真数 :?ugggg")



?uggggが16進数の範囲から外れているからでしょう。
JLS(Java Language Specification)によると、Javaのコンパイラは、ソースコードを読み込んでからコンパイルを完了するまでに以下のようなステップを踏む、とあったように記憶しています。

ユニコード変換→字句解析→構文解析→コード生成

ユニコードのエスケープシーケンスは、最初のユニコード変換のところで処理されます。つまり、具体的な字句や構文の解析(ここで、その行がコメントかどうかチェックされる)より前にユニコード変換は行われるようです。
 おそらく、そのためにユニコードのエスケープシーケンスに関してのみは、コメント内であってもコードが16進数の範囲外だとエラーになってしまうのでしょう。
(うろ覚えなので、もし微妙に違っていたらどなたか補足を)

参考URL:http://java.sun.com/docs/books/jls/third_edition …
    • good
    • 0
この回答へのお礼

ありがとうございます!
解決できました!

お礼日時:2007/11/11 13:25

こんにちは。


コメントアウトされているのにエラーになるのはおかしいですね。ひとつ気になるのは;が無いということです

class sample{
public static void main(String args[]){
System.out.println("16進数 :\u0001");
// System.out.println("16真数 :\ugggg")
}
}

真ん中の行の最後に";"を追加してみました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!