【问题标题】:Java reserved name compilation [duplicate]Java保留名称编译[重复]
【发布时间】:2015-01-13 21:56:10
【问题描述】:

我见过这个鳕鱼,请问为什么它有效?

public void nеw() {
    System.out.println("!?");
}

它是用java编译的,我认为new是保留字

【问题讨论】:

  • 这是一个西里尔字母 е.
  • @010000010110111001100100011100 哇,你是怎么发现的?
  • 每隔几周就会出现一个这样的问题。我认为发布它们的人认为他们在问一个聪明的谜语,哈哈。

标签: java


【解决方案1】:

这是cyrillic е,而不是latin e。因此,它看起来像新的,但实际上是一个不同的方法名称。

就像NPE说的,我会推荐阅读is it a good idea to use unicode symbols as java identifiers?

【讨论】:

    【解决方案2】:

    hex dump

    $ xxd -g 1 code.java
    0000000: 70 75 62 6c 69 63 20 76 6f 69 64 20 6e d0 b5 77  public void n..w
                                                    ↑↑ ↑↑                  ↑↑
    0000010: 28 29 20 7b 0a 20 20 20 20 53 79 73 74 65 6d 2e  () {.    System.
    0000020: 6f 75 74 2e 70 72 69 6e 74 6c 6e 28 22 21 3f 22  out.println("!?"
    0000030: 29 3b 0a 7d 0a 0a                                );.}..
    

    “e”不是拉丁语“e”。它是一个CYRILLIC SMALL LETTER IE(U+0435 编码为UTF-8)。因此,代码中的nеw 不是new 关键字,而是一个看起来类似于new 关键字的标识符。

    看看Is it a good idea to use unicode symbols as Java identifiers?

    【讨论】:

    • 感谢您展示您如何确定这一点。
    • 这证明了他们对编程语言的看法:“一旦他们进入拉丁语,......”
    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2023-03-25
    相关资源
    最近更新 更多