Ho visto questo cod, perché funziona per favore?Compilazione nome riservato Java
public void nеw() {
System.out.println("!?");
}
Si tratta di compilare in Java, penso nuovo è una parola riservata
Ho visto questo cod, perché funziona per favore?Compilazione nome riservato Java
public void nеw() {
System.out.println("!?");
}
Si tratta di compilare in Java, penso nuovo è una parola riservata
Si tratta di un cyrillic е, non un latin e. Pertanto, sembra nuovo, ma in realtà è un nome di metodo diverso.
Come NPE Detto questo, mi sento di raccomandare la lettura di is it a good idea to use unicode symbols as java identifiers?
sguardo al 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 );.}..
La "e" non è il latino "e". È un CYRILLIC SMALL LETTER IE (U + 0435 codificato in UTF-8). Pertanto, lo nеw
nel codice non è la parola chiave new
, ma è un identificatore che si verifica per look come la parola chiave new
.
Date un'occhiata a Is it a good idea to use unicode symbols as Java identifiers?
E 'un е cirillico. – 416E64726577
@ 010000010110111001100100011100 Wow, come l'hai notato? –
Questo è fantastico. – Josh