2012-12-05 10 views
5

Perché ottengo lo stesso risultati per i letterali maiuscoli e minuscoli? Per esempio:Valore letterale caratteri Java con getNumericValue()

char ch1 = 'A'; 
char ch2 = 'a'; 
char ch3 = 'Z'; 
char ch4 = 'z'; 

print("ch1 -- > " + Integer.toBinaryString(Character.getNumericValue(ch1))); 
print("ch2 -- > " + Integer.toBinaryString(Character.getNumericValue(ch2))); 
print("ch3 -- > " + Integer.toBinaryString(Character.getNumericValue(ch3))); 
print("ch4 -- > " + Integer.toBinaryString(Character.getNumericValue(ch4))); 

Come ottengo risultati:

ch1 -- > 1010 
ch2 -- > 1010 
ch3 -- > 100011 
ch4 -- > 100011 

E non vedo la differenza tra 'A' e 'A'. Anche se uso caratteri letterali in formato UTF (\ u0041 per 'A' e \ u0061 per 'a') ottengo gli stessi risultati.

risposta

7

Si sta comportando esattamente come documented:

Le lettere AZ nella loro maiuscole ('\ u0041' attraverso '\ u005A'), minuscole ('\ u0061' attraverso '\ u007A'), e la larghezza completa variante ('\ uFF21' attraverso '\ uFF3A' e '\ uFF41' attraverso '\ uFF5A') forme hanno valori numerici da 10 a 35.

Fondamentalmente questo significa che durante l'analisi esagono (diciamo), 0xfa == 0xFA, come ti aspetteresti.

Mi aspetto che il caso abbia importanza quando si utilizza qualcosa come base64.

+0

Eliminiamo quel commento e dimentichiamo che è successo;) –

+0

Wow, grazie, ho perso questo punto interessante dai documenti. Bel comportamento "strano", IMHO. Quello che mi aspettavo - solo per ottenere "una rappresentazione intera di carattere letterale". –

+0

@DmitriyUgnichenko: quale risultato ti aspettavi, allora? – Dolda2000

4

A giudicare dal commento, in realtà stai cercando i codepoint dei caratteri, piuttosto che il loro valore numerico, quindi li isolerò semplicemente in una risposta. La funzione getNumericValue() restituisce il significato del carattere come numero quando interpreta il suo glifo, non restituisce il punto di codice di un carattere. Ad esempio, getNumericValue('5') restituisce 5 come int, non il codice punto di 5.

Per utilizzare i punti di codice, è sufficiente utilizzare le variabili oi valori letterali di char così come sono. char è un tipo di dati numerico. Ad esempio, System.out.println((int)'a'); stamperà 65, molto semplicemente.

+0

Sì, grazie. Questo è quello che volevo (anche non so perché ho deciso di usare questo metodo getNumericValue()). Tutto è molto più facile. –

Problemi correlati