当我在做Integert.valueOf('a') 它返回97是char a的ASCII值。整数如何自动将char转换为ASCII值?
我想知道什么时候在valueOf方法中将ascii值转换为char?
当我在做Integert.valueOf('a') 它返回97是char a的ASCII值。整数如何自动将char转换为ASCII值?
我想知道什么时候在valueOf方法中将ascii值转换为char?
你会发生什么是内部类型转换。
因此您的代码等效于此:
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你的问题。
托比
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字符集,否则最好说“代码点”。
内部使用** ** parseInt函数它 – Frank
不转换,严格地说。 ASCII是一种字符编码标准,它基本上将一组字符映射到数字。 Java虚拟机具有这种映射,一边是Integers,另一边是Chars。 – marekful
@marekful能否请你解释更多,因为我看到它正在作为parseInt方法在内部调用。 – msanaullah