2017-07-18 17 views
1

Integert.valueOf( 'a')を実行しているとき charのASCII値である97を戻しています。整数は自動的にcharをASCII値に変換しますか?

charがvalueOfメソッドのascii値で変換されたときを知りたいですか?

+0

内部的に使用されている**それは、厳密に言えば、変換されていません** – Frank

+0

のparseInt。 ASCIIは、基本的に文字セットを数字にマッピングする文字エンコーディング標準です。 Java VMには、一方の側には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()); 

は、オラクルのJavaチュートリアルを引用:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

チャーは:charデータ型は、1つの16ビットUnicode文字です。 '\ u0000'(または0)の最小値と '\ uffff'(または65535を含む)の最大値を持ちます。

ので、変数aは、 ''(97)

をcharachterのUnicodeの同等のものを保持しているものを、次に起こることは拡幅操作 https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

5.1.2です。

[...]

プリミティブ変換を広げる一体型Tへチャーの拡大変換は、より広い形式を充填するchar値の表現をゼロに延びています。

したがって、char(16ビット)はint(32ビット)に拡大されます。 Integer.valueOf(に供給beeingているものであるint型

)あなたの質問をansweres

希望。

トビ

1

charは数値型です。 Integer.valueOf(int i)メソッドを呼び出すと、intになります。 charは、ゼロ拡張によって16ビットから32ビットに昇格され、その値はvalueOfメソッドに渡されます。

ASCIIはここにはほとんど関係ありません。 Oracle javac参照コンパイラのようなほとんどのJavaコンパイラは、ソースコードの解析時にWindows-1252などのプラットフォームのデフォルト文字セットを使用し、内部的にJavaはUnicodeを使用します。ただし、ASCIIはこれらの文字セットのサブセットであり、Unicodeコードポイント97 LATIN SMALL LETTER Aは3つすべてに共通です。

コードポイントを「ASCII値」と呼ぶのは一般的ですが、ギリシャ文字の「ASCII値」を話そうとすると混乱することがあります。実際にUS-ASCII文字セットについて話している場合を除き、「コードポイント」と言う方が良いでしょう。

関連する問題