2017-07-18 47 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字符集,否則最好說「代碼點」。

相關問題