Java字符文字值与getNumericValue()

Dmi*_*nko 5 java character literals

为什么我对大写和小写文字都得到相同的结果?例如:

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)));
Run Code Online (Sandbox Code Playgroud)

结果我得到:

ch1 -- > 1010
ch2 -- > 1010
ch3 -- > 100011
ch4 -- > 100011
Run Code Online (Sandbox Code Playgroud)

并没有真正看到'A'和'a'之间的区别.即使我使用UTF格式的字符文字('u'为'u','u'为\ u0061),我也会得到相同的结果.

Jon*_*eet 7

它的行为完全符合记录:

字母AZ以大写字母('\ u0041'到'\ u005A'),小写字母('\ u0061'到'\ u007A')和全宽变体('\ uFF21'到'\ uFF3A'和'\ uFF41')通过'\ uFF5A')表单的数值从10到35.

基本上这意味着在解析十六进制(比如说)时0xfa == 0xFA,正如您所期望的那样.

我只希望在使用像base64这样的东西时才能解决问题.

  • @DmitriyUgnichenko:这根本不奇怪 - 这是记录在案的行为.它试图找出字符意味着什么数值,例如'0'=> 0.正如Dolda2000所说,如果你只想要Unicode值,你可以使用`int value ='A';`. (3认同)
  • 并将Unicode值作为二进制字符串:Integer.toBinaryString('a') (3认同)