7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】基本データ型の型変換について

Posted at

はじめに

Javaでは、指定したデータ型と一致する型の値を代入するのが基本です。
ただし、自動的型変換やキャストを使ってデータ型の変換を行うことで、異なる型のデータを代入できるようになります。
本記事では、筆者がJavaを学習する中で学んだ基本データ型の代入パターンについてまとめていきたいと思います。

勉強中の身ですので理解が浅い点などあるかと思いますが、本記事を参考にされる方はその点ご了承の上、お読みいただければと思います。
間違いや補足が必要な点などあれば、ご教示いただけると助かります。


目次

1.明示的な型変換(キャスト)
2.サフィックスを使った型指定
3.暗黙的な型変換
4.エラーケース

1.明示的な型変換(キャスト)

変数に値を代入するときは、基本的に定義した基本データ型に合わせた値を代入する必要があります。

Java
int i = 10;       //int型変数 ← 整数型の数値を代入
double d = 3.5;   //double型変数 ← 浮動小数点型の数値を代入

Javaでは、デフォルトで整数はint、浮動小数点型はdoubleと認識する仕様になっています。ですが、演算に使う場合や代入をするときに型の指定が必要な場合は、以下のように行います。

Java
int i = 10;
short s = (short)i;   //int型の整数をshort型に変換

変換したい型名を括弧で囲んで変数の前につけることで、明示的に型変換を行います。
このような変換は、演算時にも使うことができます。

演算時の型変換
public class CastExample {
    public static void main(String[] args) {

        int a = 5;
        int b = 2;

        // int を long にキャストして掛け算
        long result2 = (long) a * b;
        System.out.println("int→long: " + result2); // → 10
    }
}

2. サフィックスを使った型指定

整数型と浮動小数点型では、サフィックスを使って型を示すことができます。
前項でも説明したように、Javaでは整数はint、浮動小数点型はdoubleとなるため、そのまま代入するとエラーになってしまうケースがあります。

型の不一致によるエラー
long l = 2147483648;    //int型整数と認識するが、intの範囲を超えているためエラー
float f = 3.14;         //double型小数と認識するが、floatより大きい型なのでエラー

そこで、数値リテラルの末尾にサフィックスを付けて「この数値はlong型(あるいはfloat型)の数値ですよ」と示すことで代入できるようになります。

サフィックスで型を指定
long l = 2147483648L;   //long型整数なので代入可能!
float f = 3.14f;        //float型小数なので代入可能!

3.暗黙的な型変換

前項で紹介した明示的なキャストやサフィックスを記述しない場合でも、値を代入できるパターンがあります。

小さい型から大きい型への変換(拡大変換)

小さな型からより大きな型へ代入するときは、自動での型変換が有効です。
例えばint型→long型への変換は、long型の方が表現できるデータの幅が大きくデータの損失が発生しないため、明示的なキャストなしで代入することができます。

データ型 値の表す範囲
byte 8ビット(-128 ~ 127)
short 16ビット(-32,768 ~ 32,767)
int 32ビット(-2147483648 ~ 2147483647)
long 64ビット( -9223372036854775808 ~ 9223372036854775807)
自動的な型変換
byte b = 10;            // 代入
short s = b;            // byte → short (自動型変換: 拡大変換)
int i = s;              // short → int
long l = i;             // int → long

以下のコードにおいて10はint型の整数ですが、byte型の変数に代入してもエラーになりません。

byte b = 10;

整数リテラルを代入する場合、代入する値がデータ型の範囲内であれば暗黙的に変換されて代入されます。
※小数リテラルは明示的型変換が必要

4.エラーケース

大きい型から小さい型への変換(縮小変換)

大きい型から小さい型への代入は、データを損失する可能性があるためエラーとなります。

縮小変換:エラーケース
int i = 100;
byte b = i;          //byte型<int型のためコンパイルエラー

double d = 3.14;     
float f = d;         //float型<double型のためコンパイルエラー

long l = 1000;
short s = l;         //short型<long型のためコンパイルエラー

エラーを解消するためには、前項で紹介した明示的な型変換を行う必要があります。

縮小変換
int i = 100;
byte b = (byte)i;         

double d = 3.14;     
float f = (float)d;         

long l = 1000;
short s = (short)l;         

縮小変換して代入する際は、代入する値が型の範囲をオーバーしていないか確認する必要があります。

boolean型からの変換

boolean型はtrue/falseのみ代入が可能で、数値との変換はできません。

boolean b = true;
int x = b;           //  コンパイルエラー
char c = b;          //  コンパイルエラー

まとめ

・拡大変換は自動変換が可能
・縮小変換は、基本的に明示的な型変換が必須
・数値リテラルは型の範囲内であれば暗黙的変換が可能

参考

Javaの型変換についてざっくりまとめてみた[Java初心者]
[YouTube]初心者でも分かる基本データ型の型変換:自動とキャストの違いがスパッと分かる!【Java入門講座】2-7 基本データ型の型変換


著者:M.N(株式会社ウィズツーワン)

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?