Java保留名称编译

时间:2015-01-13 21:56:11

标签: java

我见过这种鳕鱼,为什么它有效?

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

在java中编译,我认为new是保留字

2 个答案:

答案 0 :(得分:10)

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

NPE所述,我建议您阅读is it a good idea to use unicode symbols as java identifiers?

答案 1 :(得分:7)

查看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(在UTF-8编码的U + 0435)。因此,代码中的nеw不是new关键字,而是外观的标识符,如new关键字。

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