2017-07-18 49 views
1

当我在做Integert.valueOf('a') 它返回97是char a的ASCII值。整数如何自动将char转换为ASCII值?

我想知道什么时候在valueOf方法中将ascii值转换为char?

+0

内部使用** ** parseInt函数它 – Frank

+0

不转换,严格地说。 ASCII是一种字符编码标准,它基本上将一组字符映射到数字。 Java虚拟机具有这种映射,一边是Integers,另一边是Chars。 – marekful

+0

@marekful能否请你解释更多,因为我看到它正在作为parseInt方法在内部调用。 – msanaullah

回答

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数据类型是单16位的Unicode字符。它的最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535)。

所以变量a保持的unicode当量charachter的 'A'(97)

什么然后发生的是加宽操作 https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

5.1.2。加宽原语转换

[...]

炭的扩大转换为整数类型T零扩展炭值的表示,以填补较宽格式。

所以你的char(16位)将被加宽为一个int(32位)。

在于诚信是什么beeing送入Integer.valueOf()

。希望answeres你的问题。

托比

1

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

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

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

相关问题