2012-02-10 62 views
1

了法律意见书在this coderanch链接内容,我发现下面的评论会给编译器错误: -错误是由于在Java中

// Compiler Error due to this Unicode char '\u000a' 

原因是,在Unicode序列时,直接由实际的字符替换它对应于。由于'\ u000a'对应于newLine字符,因此newLine会放在找到'\ u000a'的地方。

我的问题是,“是否有任何其他方式由于评论而导致编译错误?”

回答

2

如果定义在评论(@deprecated)不推荐使用的功能,并设置你的编译器抛出的错误,当使用过时的方法(至少内部的Eclipse编译器可以配置,这是,据我所知)

1
/* Compiler Error due to this Unicode char '*/' */ 
0

此错误不是由评论本身引起的。如果您在代码中的其他地方使用相同的\u000a,则会出现同样的错误。例如:

// This will give you a similar error 
char c = '\u000a'; 

的转义序列是在你的评论时,这一事实并不意味着评论是什么原因造成的错误。

+0

是的,我已经知道,从我在我的问题中提供的链接coderanch。我的问题是,我们是否还有任何其他的Unicode字符会导致这种行为。或以其他任何方式在评论中获取错误! – whitehat 2012-02-10 09:02:17

+0

所有字符都是Unicode字符;符号'\ uXXXX'只是用代码编写它们的一种替代方法。因此,任何将字符放在错误位置的Unicode转义将导致编译器错误,与将相应字符本身放在错误位置时完全相同。 – Jesper 2012-02-10 09:21:13

4

“编译器不仅将Unicode转义转换为它们表示的字符,然后它将程序解析为令牌[...],但是它在丢弃注释和空白之前就这么做了[JLS 3.2]。” Java™Puzzlers:陷阱,陷阱和角落案例作者:Joshua Bloch,Neal Gafter。

而接下来的线是有效的Java代码:

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020 
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079 
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020 
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063 
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028 
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020 
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b 
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074 
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020 
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b 
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d