整数如何自动将char转换为ASCII值?

时间:2017-07-18 09:10:31

标签: java char integer ascii

当我在做Integert.valueOf('a')时 返回97是char a的ASCII值。

我想知道char在valueOf方法中转换为ascii值的时间是什么?

2 个答案:

答案 0 :(得分:1)

char是数字类型。您正在调用Integer.valueOf(int i)方法,该方法需要int。通过零扩展将char从16位提升到32位,并将该值传递给valueOf方法。

请注意,这里几乎肯定不涉及ASCII。大多数Java编译器(如Oracle javac引用编译器)在解析源代码时将使用平台默认字符集(如Windows-1252),而Java内部使用Unicode。但是,ASCII是这两个字符集的子集,Unicode代码点97 LATIN SMALL LETTER A对这三个字符集都是通用的。

我意识到将代码点称为“ASCII值”是很常见的,但是如果试图说出希腊字母的“ASCII值”,则会导致混淆。除非你实际上在谈论US-ASCII字符集,否则最好说“代码点”。

答案 1 :(得分:1)

您发生的是内部类型转换。

所以你的代码等同于:

char a = 'a';
int aint = (int)a;
Integer aInteger = Integer.valueOf(aint);
System.out.println(aInteger.toString());

引用oracle java教程:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

  

char:char数据类型是一个16位Unicode字符。它的最小值为' \ u0000' (或0)和' \ uffff'的最大值(或65,535包括在内)。

因此,变量a保持了与字符相同的unicode' a' (97)

然后发生的是扩大操作 https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

  

5.1.2。扩大原始转换

     

[...]

     

将字符的扩展转换为整数类型T零扩展char值的表示以填充更宽的格式。

所以你的char(16位)将被扩展为int(32位)。

那个int正在进入Integer.valueOf()

希望回答你的问题。

托比