Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

charは整数を格納できる様ですが

charは整数型に分類されるという事ですが、

char cn = 1;
は可能なのに、

int in = 1;
char cn2 = in;
はなぜ出来ないのでしょうか?

9

回答

8424

閲覧

9件の回答

評価

0

>char cn = 1;
char型は-128〜127の整数値を格納できるよ。
故に、1は格納できるよ。この時の1はint型じゃないよ。

>char cn2 = in;
戻り値の型をプリミティブ型にした場合には、その指定した種類の値を返さなければならない。

>なぜ出来ないのか?
精度が落ちるから。

評価

0

@

> char型は-128〜127の整数値を格納できるよ。

え?なんの話? C言語?

Javaのchar型は16ビットだし、Javaのプリミティブ数値側はすべてunsignedですよ。なので charは0〜65535まで。

> char cn2 = in;

上位桁が落ちても良い、または、0〜65535に収まっているという保証があるなら (int)in; とキャストすれば良いです。

評価

0

@

まちがえました。数値型はsignedです。

評価

0

byteと間違えました。失礼しました。

評価

0

> 上位桁が落ちても良い、または、0〜65535に収まっているという保証があるなら (int)in; とキャストすれば良いです。


(char)in; 

では?

評価

0

http://www.javaroad.jp/bbs/answer.jsp?q_id=20120216034000660
これと同一人物なら困ったものだが、違うなら一読して来ると良いだろう。

はじめのうちに出会う疑問や間違いは、ほとんどが調べれは得られる情報だと思っ
て良い。
質問する前に自力で調べてみよう。

評価

30

一体どこからcharが整数に分類されると学んだんだろうか?
charはUnicode文字を格納できるだけで整数を格納出来るわけではない。

なので
int in = 1;
char cn2 = in;
はコンパイルエラーとなる。

つまりこれをch2に格納したいのであれば
char cn2 = (char)in;
とすると
in → 0001 → '\u0001'と変換することで格納する。

■整数が格納できるわけではないので注意しよう。

あと、本かネットでもいいけどもう少し基礎を勉強しよう。

評価

0

皆さん。基礎的な質問に、詳しい回答有難うございます。
> これと同一人物なら困ったものだが、違うなら一読して来ると良いだろう。
今後の参考にさせて頂きます。

> 一体どこからcharが整数に分類されると学んだんだろうか?

私もずっと、charは文字型だと思っていたのですが、
ここの情報で学びました。
http://www.wisdomsoft.jp/88.html
私なりに書籍において調べてみると
「一文字を扱う文字型」と説明する物もあるし、
「0と正の値を表現する符合無し整数型」と説明する物がありました。
今は、「特別な整数型を文字型と定義して扱っている」、と解釈してます。
整数型解釈でもintとcharは異なる種類なのでキャストが必要と。
char cn = 123;
System.out.println(cn);
で123と出力されていたのは、charがchar型として保持する整数値だったのですね。勘違いしておりました。

評価

0

本来なにに使うものとして定義されたかが分かってれば、別に整数を格納すると考
えても構わないがね。
サロゲートのサポートで、「1文字を格納する」前提も崩れてるし。

最近はあまりそういう機会もないが、昔は領域を節約するためにcharを数値やフラ
グに使うこともあった。
いや、これはJavaの話ではないな。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。