Java字符文字值与getNumericValue()

时间:2012-12-05 06:59:28

标签: 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)));

结果我得到了:

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

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

2 个答案:

答案 0 :(得分:7)

它的行为与documented完全相同:

  

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

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

我只希望在使用base64这样的东西时能够解决问题。

答案 1 :(得分:4)

从评论来看,你实际上是在寻找角色的代码点,而不是它们的数值,所以我只是把它分成答案。 getNumericValue()函数在解释其字形时返回字符作为数字的含义,它不返回字符的代码点。例如,getNumericValue('5')返回5作为int,而不是5的代码点。

要使用代码点,只需使用您的变量或字符文字。 char是一种数字数据类型。例如,System.out.println((int)'a');将打印65,非常简单。