5
0

More than 3 years have passed since last update.

【Javaの基礎知識】型変換について

Posted at

はじめに

こちらの記事は、
- Javaをこれから学習し始める
- 基本的なことをおさらいしたい

という方向けです。

型や変数については下記の記事に記載しております。
【Javaの基礎知識】型や変数について

基本型(プリミティブ型)の変換

ある基本型の変数から他の基本型の変数に変換す方法をご紹介します。

変換元の基本型 型変換が可能な変更先の基本型
char int, long, float, double
byte short, int, long, float, double
short int, long, float, double
int long, float, double
long float, double
float double
double なし

小さい型から大きい型

整数のデータ型は、
byte < short < int < long
というサイズ感です。
小さい型から大きい型に変換するとき、自動的に型が変換される場合と、プログラマが意識的に変換を行うキャストがあります。

    自動的に型が変換される場合

    byte a = 127;
    short b = a;
    System.out.println(b);//出力結果=127

    short c = 32767;
    long d = c;
    System.out.println(d);//出力結果=32767
    プログラマが意識的に変換を行うキャスト

    byte a = 127;
    byte b = 127;
    System.out.println((long)a + b);//出力結果=254

    int c = 2147483647;
    int d = 2147483647;
    System.out.println((long)c + d);//出力結果=4294967294

大きい型から小さい型

大きい型から小さい型への変換は注意が必要です。

以下のやり方だとエラーがでます。

    long a = Long.MAX_VALUE;//longの最大値を代入しています
    System.out.println(a);//出力結果=9223372036854775807
    short b = a;//Type mismatch: cannot convert from long to short

エラーを直す方法はありますが、変数の中身が変わってしまいます。
そのデータ型が持つことのできるサイズを超えるとデータの切り捨て(データの溢れ)が生じ、想定された実行結果になりません。

    long a = Long.MAX_VALUE;//longの最大値を代入しています
    System.out.println(a);//出力結果=9223372036854775807
    short b = (short) a;//キャストで型変換しています
    System.out.println(b);//出力結果=-1

参照型の変換

今回は、クラス型の型変換のみの説明になります。
変換元の参照型がクラス型の場合の変換先の参照型と、型変換のルールが下図の通りです。

変換先の参照型 型変換のルール
クラス型 変換先のクラス型が変換元のクラス型のスーパークラスであること。
インタフェース型 変換先のインタフェース型のインタフェースを変換元のクラス型のクラスが実装していること。
配列型 型変換不可。


参照型暗黙の型変換
親クラス型 変数 = new 子クラス();

//親クラス
class Oya {
  void greet() {
    String a = "おはよう";
      System.out.println(a);
  }
}

//親クラスを継承した子クラス
class Kodomo extends Oya {
  void name() {
    String b = "イニエスタ";
      System.out.println(b);
  }
  public static void main(String[] args) {
      Oya oy = new Kodomo();
      oy.greet();//出力結果=おはよう
      Oya oy2 = new Oya();
      oy2.greet();//出力結果=おはよう

      Kodomo ko = new Kodomo();
      ko.greet();//出力結果=おはよう
      ko.name();//出力結果=イニエスタ
      Kodomo ko2 = new Oya();//エラー:Type mismatch: cannot convert from Oya to Kodomo

  }
}

エラーが出ているところにあるように、
子クラス型 変数 = new 親クラス();
はできません。

文字列への変換

全ての型から文字型へ変換が可能です。

    Integer a1 = 123;
    String s1 = "あ" + a1;
    System.out.println(s1);//出力結果=あ123
    System.out.println(s1 instanceof String);//出力結果=true


    int a2 = -123;
    String s2 = String.valueOf(a2);
    System.out.println(s2);//出力結果=-123
    System.out.println(s2 instanceof String);//出力結果=true

最後に

参照型の変換に関してまだまだ深くは理解できていないので、
わかり次第追記していく予定です。

それでは、ありがとうございました☕️

5
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
5
0