2013-01-15 7 views
5

可能性の重複:
javaのintにcharを代入できるのはなぜですか?

char and int in Java

AsicII表:http://www.asciitable.com

例えばプリントアウト対応チャーの12月の値を、 "123" 以下のコード - > 49 50 51

public void foo(String str) 
     { 
      for(int x = 0; x < str.length(); x++) 
      { 
       int temp = str.charAt(x); 
       System.out.println(temp); 
      } 
     } 

しかし、私はjavaが強いタイプの言語であることに気付きました。これは、コンパイル時にすべてのことがキャストされなければならないことを意味しますが、AsicIIテーブルのcharを正しいDec値にいつどのように変換するのか、 私はjava/programmingの基本を混乱させましたか?

+0

これは良い質問です。 Javaがcharsからintsへの自動キャストを可能にするのは奇妙なことです。 +1 – BlackVegetable

+3

Javaでは、より小さい型からより高い型への自動キャストが可能です。コンパイルエラーが発生した場合、それを逆にするとコンパイルエラーが発生します。 – aldrinleal

+0

これを誤って実行し、バグを導入する可能性のある例を含めることはできますか? –

答えて

8

charは、符号なし16ビットの数値なので、基本的にintタイプのサブセットであるため、あいまいさなくキャストすることができます。

+0

ええ、その論理は、表現値を変えずにキャストを実行できると思うようになります。したがって、 '1'は49ではなく '1'にキャストされます。 – BlackVegetable

+0

表現と価値は同じものではありません。 2つの値は同じ値(つまり49)を持つことができますが、charでは '1'、intでは49の表現が異なります。私があなたをさらに混乱させるならば、私は君を怒らせる... – mprivat

+0

Nah、あなたは正しいです。私は間違った言葉を使いました。私はそれがそうするようにそれをキャストすることができるか、またはすべてのint - > charキャストを禁止しなければならないと思う0 - > 9だけ意味をなさない。 – BlackVegetable

2

JavaはCに基づいて行われ、Cの機能のthatsした文字はしかし、スカラー型と同様

数を表し、キャッチがあります: - アスキー文字 が得られる文字を印刷するには - 例

(intは文字に変換する、関与するいくつかの切り捨てが存在するように、明示的に行われる必要がある)、INTを印刷アップキャストし、意気消沈に関するいくつかの詳細もある数

をもたらす:

long a = 1L; // a real long 
long n = 5; // int, cast to long 
int x = n; // (will raise an error) 
int z = (int) n; // works fine 
2

charには二重の性格があります。

16ビットの符号なし整数の数値型です。これは、明示的なキャストを必要とせずに必要に応じてコンパイラが挿入する変換の1つである拡大プリミティブ変換を含む非常に自然な操作をintに割り当てます。

また、I/O操作と文字列操作で文字が表現される方法です。

関連する問題