2016-04-04 12 views
8

Ich habe diese Aussagen:Ist u65549 ein gültiger Java-Bezeichner?

int \u65549 = 9; 
System.out.println(\u65549); 

Das perfekt kompiliert. Und Ausgänge

9 

Aber:

System.out.println(Character.isJavaIdentifierStart(\u65549)); 

Ausgänge

false 


habe ich einige der Forschung zu diesem Thema. Ich lese die Dokumentation, und es heißt:

Diese Methode kann nicht mit zusätzlichen Zeichen umgehen. Verwenden Sie die Methode isJavaIdentifierStart(int), um alle Unicode-Zeichen einschließlich Zusatzzeichen zu unterstützen.

Dann habe ich dies:

int x = \u65549; 
System.out.println(Character.isJavaIdentifierStart(x)); 

Aber auch diese Drucke:

false 

Also, bedeutet dies, dass Java über \u65549 verwechselt wird eine Kennung zu sein?

+0

@ bcsb1001 Sie haben die Deklaration "int \ u65549" in beide Snippets gelöscht, weshalb Sie das Problem nicht reproduzieren konnten. – rhino

+0

Die angenommene Antwort hat vergessen, Ihr drittes Beispiel zu erwähnen. Eigentlich 'int \ u65549 = 9 (du hast vergessen zu erwähnen, dass das oben erscheinen muss); int X = \ u65549; Sop (Character.isJavaIdentifierStart (x)); 'ist gleich wie' int A = 9; Int X = A; Sop (Character.isJavaIdentifierStart (X)); ', das bedeutet dasselbe Ergebnis wie das zweite Beispiel' int A = 9; Sop (Character.isJavaIdentifierStart (A)); ' –

Antwort

8
int \u65549 = 9; 
System.out.println(Character.isJavaIdentifierStart(\u65549)); 

Hier \u65549 ist der Name einer Variablen, die auch 9 den Wert enthalten passiert. Es sollte (und nicht) das gleiche tun, als ob Sie schrieb:

System.out.println(Character.isJavaIdentifierStart(9)); 

die false druckt, da Sie kein Java Bezeichner beginnen mit einem Leerzeichen haben kann (\u0009 ist der Codepunkt für die horizontale TAB, '\t') .

+0

Oh ja, du hast Recht. Vielen Dank. – Hackerdarshi

+0

Sie haben meinen jetzt gelöschten Kommentar in den Benachrichtigungen gesehen, nicht wahr? :) Ich habe einen offensichtlichen Fehler in meinem Denken gemacht, dass ich bald korrigiert habe, aber das Gute ist, dass ich dabei geholfen habe, deinen Beitrag noch klarer zu machen. ** Edit: ** Ich habe gerade den Revisionsverlauf überprüft und es scheint, dass Sie den gleichen Fehler gemacht haben. Froh bin ich nicht alleine :) – rhino

2

\u65549 wird als das Unicode-Zeichen \u6554 interpretiert, gefolgt von dem Zeichen 9.

Dies ist eine gültige Syntax in einem String.

Ansonsten ist \u65549 kein gültiger Unicode-Bezeichner. Ein String nimmt nur den gültigen Teil (4 Zeichen im hexadezimalen Bereich), wenn er auf ein Unicode-Präfix (\u) stößt, so dass nur der gültige Bezeichner Teil verwendet wird und ein gültiges Zeichen erhalten wird.

+0

Warum geben diese Methoden dann false zurück? – Hackerdarshi

+0

Was bedeutet 'Character.isJavaIdentifierStart (\ u6554)'? –

+0

@AndyTurner Es kompiliert nicht.Der Fehler sagt: "Kann kein Symbol finden, veränderbar " (Es zeichnet tatsächlich ein Quadrat.) – Hackerdarshi

Verwandte Themen