2012-12-05 18 views
5

Hem üst hem de küçük harfli hazırlaçlar için neden aynı sonuçları alırım? Örneğin:Java Karakter değişmez değeri ile getNumericValue()

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

Ve gerçekten 'A' ve 'a' arasındaki fark görmüyorum: Sonuçların olarak

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))); 

alıyorum. UTF formunda karakter değişmezlerini kullansam bile ('a' için \ u0041 ve 'a' için \ u0061) aynı sonuçları elde ediyorum.

cevap

7

Bu documented tam olarak davrandığından:

harf AZ bunların büyük olarak, küçük harf ('\ u0061 '\ u007A' üzerinden) ve tam genişliği (' \ u0041 '\ u005A' üzerinden) formları varyantı ('\ uFF5A' üzerinden '\ uFF3A' ve '\ uFF41' üzerinden '\ uFF21')

35 ile 10 arasında sayısal değerlere sahip Temelde bu demektir ki (örneğin), 0xfa == 0xFA hex ayrıştırılırken, beklediğiniz gibi. Base64 gibi bir şey kullanırken yalnızca önemli bir durumun olmasını beklerim.

+0

Sadece bu yorumu silelim ve bunu unutun;) –

+0

Wow, teşekkürler, bu ilginç noktayı doktorlardan kaçırdım. Oldukça 'tuhaf' davranış, IMHO. Beklediğim şey - sadece "karakter edebi bir tamsayı gösterimi" elde etmek için. –

+0

@DmitriyUgnichenko: O zaman ne tür bir sonuç bekliyordunuz? – Dolda2000

4

Yorumdan yola çıkarak, aslında sayısal değerlerden ziyade karakterlerin kod noktalarını arıyorsunuz, dolayısıyla bunu bir yanıt olarak ayıracağım. getNumericValue() işlevi, karakterin glifini yorumlarken bir sayı olarak ifade ettiği şeyi döndürür, bir karakterin kod noktasını döndürmez. Örneğin, getNumericValue('5'), int olarak 5, 5 kod noktasını döndürür.

Kod noktalarını kullanmak için, değişkenlerinizi veya karakter değişmezlerini oldukları gibi kullanın. char sayısal veri türüdür. Örneğin, System.out.println((int)'a');, oldukça basit bir şekilde 65 yazdıracaktır.

+0

Evet, teşekkürler. İstediğim buydu (neden bu getNumericValue() yöntemini kullanmaya karar verdiğimi bile bilmiyorum). Her şey çok daha kolay. –