Java的字符文字与getNumericValue值()(Java Character litera

2019-07-04 13:52发布

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

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形式的字符文字(\ u0041为“A”和\ u0061为“A”)我得到了相同的结果。

Answer 1:

它的表现完全一样记录 :

(通过 '\ u005A' '\ u0041'),小写( '\ u0061' 到 '\ u007A'),和全宽度的变体( '\ uFF21' 到 '\ uFF3A' 和 '\ uFF41' 在它们的大写字母AZ通过“\ uFF5A”)的形式从10到35具有的数值。

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

我只希望情况下使用类似的base64时事。



Answer 2:

从评论来看,你实际上是寻找人物的码点,而不是它们的数值,所以我就隔离到一个答案。 该getNumericValue()函数返回什么字符都表示为一个数字解释其字形时,它不会返回字符的代码点。 例如, getNumericValue('5')返回5作为int ,而不是码点5

要使用码点,只需用你的变量或字符常量,因为它们。 char是数字数据类型。 例如, System.out.println((int)'a'); 将打印65,很简单。



文章来源: Java Character literals value with getNumericValue()