Google検索エンジン

トップページ » Javaキャスト入門 » 暗黙的な型変換の詳細


暗黙的な型変換の詳細

  • 暗黙的な型変換について

    前のページ「キャストとは?」で、型変換には暗黙的にJava実行環境が行う型変換と、プログラマが意図的に行う型変換(キャスト)があることを説明しました。 暗黙的にJava実行環境が行う型変換については、プログラマーが意識してキャストする必要はありません。

    ただし、実務において共同開発するときは、プログラマーどうしが分かりやすいように明示的にキャストした方が良いでしょう。 また、数値型の領域に関するトラブルを回避するために、無理やり型変換して対処することは、おすすめできません。

    基本的に数値を扱う場合、型変換が発生するような数値型は宣言しないようにします。 もし、領域外の数値が処理されてしまったら、変数の宣言自体を見直すことをおすすめします。 各型の領域については、Java入門講座の変数を参照してください。

    JDK5.0(Tiger)からは、オートボクシング機能が実装されており、プリミティブ型と対応するラッパクラス参照を自動的に相互変換するようになりました。 オートボクシングについては、オートボクシング機能(JDK5.0以降)をご覧ください。


    基本データ型を型変換する際の規則

    基本データ型(プリミティブ型)の型変換は、型の領域を拡大することのみが許可されています。 言い換えると、「小」から「大」へ拡大変換(ワイドニング変換)できますが、逆の「大」から「小」への縮小変換(ナローイング変換)はできません。 下に変換できる基本型をまとめた表を用意しましたので、参考にしてください。

    下の表は、あくまでも「基本型への変換」の表です。 基本型以外なら、APIにあるラッパークラスの「Boolean」を使用することで、プリミティブ型「boolean」の値を「String」に変換することも可能です。 同様にAPIを利用することで、「double」と「String」、または「double」と「BigDecimal」等の型変換も可能になります。

    変換元 変換元のラッパークラス 変換できる基本型
    boolean Boolean 基本型への変換不可
    char Character int、long、float、double
    byte Byte short、int、long、float、double
    short Short int、long、float、double
    int Integer long、float、double
    long Long float、double
    float Float double
    double Double 基本型への変換不可

    Java実行環境が暗黙的に型変換するケース

    本来キャストは「(変換できる型)変換元の変数;」と記述しますが、プログラマが明示的に記述していなくても、Java実行環境から、より広いデータ格納領域の型への変換要求があった場合に、暗黙的な型変換が行われます。 ここでは、これを暗黙的な型変換と呼んでいます。 以下の様な場合に暗黙的に型が変換されています。

     ・代入するとき
     ・計算するとき

    他にもあるかもしれませんが、ここでは2つのケースに限定して説明します。


    代入するときに発生する暗黙的な型変換

    基本型の変数を、別の基本型の変数に代入する際に、規則に従って型変換が行われます。 以下のプログラムを実行すると、プログラマが意識してキャストしなくても、intからdoubleに代入されていることを確認できます。

    サンプルソースコード
    class sample {
    	// 暗黙的に型が変換される例
    	public static void main(String args[]) {
    		int x = 100;
    		double y;
    		y = x;
    		System.out.println(y);
    	}
    }
    

    以下の例の様にdoubleからintに代入しようとすると、コンパイルエラーになります。 プロンプトには、問題のJavaソースの行と「精度が落ちている可能性」のメッセージが出力されます。

    サンプルソースコード
    class sample {
    	// コンパイルエラーの例
    	public static void main(String args[]) {
    		double x = 100;
    		int y;
    		y = x;
    		System.out.println(y);
    	}
    }
    

    計算するときに発生する暗黙的な型変換

    算術演算子により演算を行う際に、暗黙的な型変換が行われて演算されています。 以下のプログラムでは、キャストせずにint型とdouble型の値を計算していますが、正常に処理されます。 処理結果としては問題ありませんが、混乱を避けるためにもキャスト(双方同じ型に変換)して計算するようにした方が良いと思います。

    サンプルソースコード
    class sample {
    	public static void main(String args[]) {
    		int x = 100;
    		double y = 777.77;
    		double z = x + y;
    		System.out.println(z);
    	}
    }
    

    次ページでは、オートボクシング機能(JDK5.0以降)について説明します。



Javaキャスト入門
書籍の紹介
  • Java ポケットリファレンス
    Java ポケットリファレンス
    発売:2011/03/25
    定価:2,709円
    著者:高江 賢
    出版:技術評論社
    内容:ベーシックだけど忘れてしまいがちな情報をコンパクトなサイズに凝縮し、「逆引き形式で目的からすぐ探せる」「サンプルコードを見ながら具体的な実装のイメージがつかめる」特徴で現場に欠かせない1冊です。
  • フェイスブック 若き天才の野望 (5億人をつなぐソーシャルネットワークはこう生まれた)
    フェイスブック 若き天才の野望
    発売:2011/01/13
    定価:1,890円
    著者:デビッド・カークパトリック
    出版:日経BP社
    内容:ユーザー数が5億人を超え、会社の時価総額が2兆円を超え、グーグルを驚かす存在となった、フェイスブック。同社を率いるマスコミ嫌いのCEO、マーク・ザッカーバーグからの信頼を勝ち得たベテラン記者が、徹底取材からフェイスブックの真実を初めて明かします。
  • プログラマが知るべき97のこと
    プログラマが知るべき97のこと
    発売:2010/12/18
    定価:1,995円
    著者:和田 卓人
    出版:オライリージャパン
    内容:世界中で活躍するプログラマによる97本のエッセイを収録した書籍です。プログラミングにおいてもっとも重要な事柄は何か、バージョン管理やテスティング、設計原則とコーディングテクニック、また腕を磨くための勉強法などについて、経験豊かなプログラマが自らの体験を踏まえて解説します。
  • 明解Java 入門編
    明解Java 入門編
    発売:2007/08/08
    定価:2,730円
    著者:柴田 望洋
    出版:ソフトバンククリエイティブ
    内容:丁寧な解説と適切なサンプルプログラム248編と、豊富で分かりやすい図表278点で、Javaの基礎から学習できます。Javaプログラミング初心者におすすめの一冊です。
  • Effective Java 第2版 (The Java Series)
    Effective Java
    発売:2008/11/27
    定価:3,780円
    著者:Joshua Bloch他
    出版:ピアソンエデュケーション
    内容:著者のGoogle, Sun Microsystemsにおけるソフトウェア開発で得た知識・経験をまとめています。Javaプログラミングをする全てのSE必読の書籍です。
  • プログラミング言語Java (The Java Series)
    プログラミング言語Java
    発売:2007/04
    定価:4,410円
    著者:ケン・アーノルド他
    出版:ピアソンエデュケーション
    内容:Javaの原典と呼べる本です。変数、コメント、定数、制御、クラス、配列、文字列、例外処理までわずか30ページで進むので、Javaを学習し始めたばかりの方には少し難しいかもしれません。厚さの割に価格も手ごろなので、Java使いなら本棚に置いておきたい本です。