我见过这种鳕鱼,为什么它有效?
public void nеw() {
System.out.println("!?");
}
在java中编译,我认为new是保留字
答案 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?