當我在做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