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

初めに

型変換について第1弾の続き
いくつか被る部分もあるがご容赦頂きたい。今回はプリミティブ型の型変換について見ていく。

キャストとは

変数の型変換のことを言う。変数にはintやStringなどの様々な型があり、適切な型変換を行わないとコンパイルエラーや実行時エラーが発生する。

int型→long型

これは代入で問題ない。
参照

long型→int型

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		long l = 10L;
		int num = l;
		System.out.println(num);
	}
}

結果

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	型の不一致: long から int には変換できません

	at Main.main(Main.java:4)

こちらはエラーになる。int型はlong型より扱えるデータ量が少ないためだ。この時にキャスト演算子を使って型変換をする必要がある。

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		long l = 10L;
		int num = (int)l;
		System.out.println(num);
	}
}

結果

10

今度は問題なく実行できた、これまでは整数同士だったが小数同士だとどうなるだろうか。

float型→double型

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		float f = 1.2F;
		double d = f;
		System.out.println(d);
	}
}

結果

1.2000000476837158

doubleの方がfloatより扱える範囲が大きいため、こちらは問題なく実行できた。

double型→float型

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		double d = 1.2;
		float f = d;
		System.out.println(f);
	}
}

結果

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	型の不一致: double から float には変換できません

	at Main.main(Main.java:4)

こちらもfloatの方が扱える範囲が小さいためエラーになる。キャスト演算子を使ってみよう。

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		double d = 1.2;
		float f = (float)d;
		System.out.println(f);
	}
}

結果

1.2

今度は実行できた。では小数と整数の変換はどうなるだろうか。

int型→double型

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		int num = 10;
		double d = num;
		System.out.println(d);
	}
}

結果

10.0
``

整数から小数は問題なく実行できた。

## double型→int型
```ruby:Java(Main.java)
public class Main {
	public static void main(String[] args) {
		double d = 10.2;
		int num = d;
		System.out.println(num);
	}
}

結果

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	型の不一致: double から int には変換できません

	at Main.main(Main.java:4)

エラーになってしまった。doubleは小数点を持つがintは持たないため、うまく変換ができなかったのだ。ここでもキャスト演算子を使ってみよう。

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		double d = 10.2;
		int num =  (int)d;
		System.out.println(num);
	}
}

結果

10

問題無く実行できた、そして小数点の部分が自動的に削除された。
今度は文字同士で確認してみよう。

char型→String型

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		char a = 'a';
		String str = a;
		System.out.println(str);
	}
}

結果

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	型の不一致: char から String には変換できません

	at Main.main(Main.java:4)

エラーになってしまった、実はキャスト演算子を使ってもエラーになる。ここではString.valueOfを使って変換できる。

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		char a = 'a';
		String str = String.valueOf(a);
		System.out.println(str);
	}
}

結果

a

String型→char型

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		String str = "hello";
		char a = str;
		System.out.println(a);
	}
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	型の不一致: String から char には変換できません

	at Main.main(Main.java:4)

これは想像しやすいかもしれない、char型は1文字だけ格納するのでString型と扱う範囲が異なる。この場合は**CharAt(index)**を使用して1文字を取得するようにする。

Java(Main.java)
public class Main {
	public static void main(String[] args) {
		String str = "hello";
		char a = str.charAt(1);
		System.out.println(a);
	}
}

結果

e

index=1の文字はeなので、eを取り出すことができた。

まとめ

  • int型→long型やint型→double型など、より大きい範囲を扱う型に変換する時は代入のみでOK
  • long型→int型やdouble型→int型など、より小さい範囲を扱う型に変換する時はキャスト演算子を使う。この時小数→整数への変換で小数点以下が失われる
  • char型→String型の変換ではString.valueOfを使う
  • String型→char型への文字取り出しはCharAt(index)を使う
0
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
0
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?