Java 中的合法注释内容导致错误

发布于 2025-01-04 06:16:36 字数 366 浏览 0 评论 0原文

coderanch 链接上,我发现下面的注释会给出编译器错误:-

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

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

我的问题是,“是否还有其他方法因评论而出现编译错误?”

On this coderanch link, I found that the following comment will give compiler error :-

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

Reason being, the Unicode sequence is directly replaced by the actual character it corresponds to. Since '\u000a' corresponds to newLine character, a newLine is placed at the place where '\u000a' is found.

My question is that, "Is there any other way of having Compilation Error due to a comment?"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

樱花落人离去 2025-01-11 06:16:36

“编译器不仅在将程序解析为标记之前将 Unicode 转义转换为它们所表示的字符 [...],而且在丢弃注释和空格之前执行此操作 [JLS 3.2]。” Java™ Puzzlers: Traps, Pitfalls, and Corner Cases 作者: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

"The compiler not only translates Unicode escapes into the characters they represent before it parses a program into tokens [...], but it does so before discarding comments and white space [JLS 3.2]." Java™ Puzzlers: Traps, Pitfalls, and Corner Cases By Joshua Bloch, Neal Gafter.

And the next lines are valid Java code:

\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
红玫瑰 2025-01-11 06:16:36

如果您在注释中定义了一个已弃用的函数 (@deprecated),并且您将编译器设置为在使用已弃用的方法时抛出错误(至少可以配置内部 Eclipse 编译器,AFAIK)

IF you define a function a deprecated in a comment (@deprecated), AND you set your compiler to throw errors when deprecated methods are used (at least the internal Eclipse compiler can be configured this was, AFAIK)

谁的新欢旧爱 2025-01-11 06:16:36
/* Compiler Error due to this Unicode char '*/' */
/* Compiler Error due to this Unicode char '*/' */
世俗缘 2025-01-11 06:16:36

这个错误不是由评论本身引起的。如果您在代码中的其他地方使用相同的 \u000a,您将收到相同类型的错误。例如:

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

转义序列位于示例中的注释中这一事实并不意味着注释是导致错误的原因。

This error is not caused by the comment itself. If you use the same \u000a somewhere else in your code, you'll get the same kind of error. For example:

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

The fact that the escape sequence is in a comment in your example doesn't mean that the comment is what causes the error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文