Help us understand the problem. What is going on with this article?

【Java】char型はint型にキャストできる

More than 1 year has passed since last update.

はじめに

Java SE8 Silverの問題集を読んでいたら、「char型は暗黙的にint型やdouble型にキャストできる」と書かれていました。
恥ずかしながら、業務で何年もJavaを使っていましたが、この事実を全く知りませんでした。

そこで、「なぜchar型がint型やdouble型にキャストできるのか?」という理由を調べようと思ったのですが、問題集の中にはその理由が書かれていなかったので、私なりに調べた結果をまとめてみました。
※誤っている記述等がありましたら、ご指摘頂けると幸いです。

調査に使ったコード

TypeCast.java
public class TypeCast {
    public static void main(String[] args) {
        char ch = '1';

        // 暗黙的にint型、double型にキャストする。
        int i = ch;
        double d = ch;
        System.out.println(ch + "をint型にキャストした結果: " + i);
        System.out.println(ch + "をdouble型にキャストした結果: " + d);

        // 引数がdouble型のメソッドに対して、char型を引数として渡す。
        foo(ch);
    }

    static void foo(double d) {
        System.out.println("double型: " + d);
    }
}

出力結果

  • 何のエラーもなく、コンパイルして実行できました。
  • ですが、char型の「1」をint型にキャストすると、なぜか「49」になってしまいます。
1をint型にキャストした結果: 49
1をdouble型にキャストした結果: 49.0
double型: 49.0

char型の「1」をint型にキャストすると「49」になる理由

char型のラッパークラスであるCharacter型のAPIを見ると、「Unicode文字表現」と書かれています。
そこで「1」をUnicodeの表で見ると、「U+0031」という値で表されていることが分かります。

Unicodeの表の値は16進法であり、実際には「0x31」となっているため、これを10進法に改めると「49」となります。
つまり、char型の「1」が暗黙的にint型にキャストされた場合、この「49」がint型の変数に格納されていることになります。

まとめ

  • char型は「文字のデータ型」という認識だったので、int型やdouble型にキャストできることに驚きましたが、理由を調べて何となく腑に落ちました。
  • 資格試験の勉強をすると、「普段は業務で使わない部分」まで学習する必要があるので、試験の合否に関わらず自身の知識レベルを知る良い機会になります。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした