Java初心者の競技プログラミング日記

Dvorak配列でjavaを書いてます

Javaの型変換について

Javaのデータ型は、基本型(プリミティブ型)や参照型、クラス型などさまざまに分類され、型変換のさいには山ほどの規則と注意点があるということなのだが、ここではとりあえず、それぞれの型同士の相互変換が成り立つか、成り立つとすればどのような方法で変換すればいいか、それをまとめておきたいと思ったので、この記事を書くことにした。

今回は、Javaプログラミングでよく使う以下のデータ型
・String
・char
・int
・long
・double
これらの相互変換をまとめてみたい。



【String型】

import java.util.*;

public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		//これらの文字列をそれぞれのデータ型に変換する
		String s_int = "100";
		String s_long = "999999999999999";
		String s_double = "3.14";
		String s_char1 = "abcde";
		String s_char2 = "a";
		
		
		//int型,long型,double型へは、それぞれに対応したメソッドを使えば変換できる
		int i = Integer.parseInt(s_int);
		long L = Long.parseLong(s_long);
		double d = Double.parseDouble(s_double);
		
		
		//char型には1バイトしか入らないので、Stringを分解してchar型配列に入れる
		char[] c1 = s_char1.toCharArray();
		
		//Stringが1バイトの場合は、charAt()を使う
		char c2 = s_char2.charAt(0);
	}
}



【char型】

import java.util.*;

public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		//これらの文字をそれぞれのデータ型に変換する
		char c_int = 'I';
		char c_long = 'L';
		char c_double = 'D';
		char c_String = 'S';
		
		
		//int型,long型,double型
		//int以外は多分使わないと思うが一応……
		int i = (int)(c_int); //output = 73
		long L = (long)(c_long); //output = 76
		double d = (double)(c_double); //output = 68.0;
		
		
		//String型
		String s1 = String.valueOf(c_String); //output = S
		
		//String型に直接char型を足し合わせることもできる
		String s2 = "abc";
		s2 += c_String; //output = abcS
	}
}



【int型】

import java.util.*;

public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		//これらの値をそれぞれのデータ型に変換する
		int i_long = 10000;
		int i_double = 100;
		int i_char = 65;
		int i_String = 1234567890;
		
		
		//long型,double型
		//何もしなくても勝手に変換される……?
		long L = i_long;
		double d = i_double;
		
		
		//char型
		//intの値が、char型で扱える範囲の数値であることが条件。
		char c = (char)(i_char); //output = A
		
		
		//String型
		String s = String.valueOf(i_String);
	}
}



【long型】

import java.util.*;

public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		//これらの値をそれぞれのデータ型に変換する
		long L_int = 10000;
		long L_double = 100;
		long L_char = 65;
		long L_String = 999999999999999L;
		
		
		//int型,double型
		//long型からint型に変換すると桁あふれを起こす可能性があるので、
		//基本的にはしないほうがいいと思われる。
		int i = (int)(L_int);
		double d = L_double;
		
		
		//char型
		//long型の値が、char型で扱える範囲の数値であることが条件。
		//多分一生使わないと思う。
		char c = (char)(L_char); //output = A
		
		
		//String型
		String s = String.valueOf(L_String);
	}
}



【double型】

import java.util.*;

public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		//これらの値をそれぞれのデータ型に変換する
		double d_int = 1.5;
		double d_long = 100.555;
		double d_char = 65.0;
		double d_String = 0.999999999999999;
		
		
		//int型,double型
		//小数点以下が消失し、誤差が発生してしまうので、
		//基本的にはしないほうが無難だと思われる。
		//逆にそのことを利用して、小数点以下を切り捨てるのに使うことができる。
		int i = (int)(d_int); //output = 1
		long L = (int)(d_long); //output = 100
		
		
		//char型
		//double型の値が、char型で扱える範囲の数値であることが条件。
		//多分一生使わないと思う。
		char c = (char)(d_char); //output = A
		
		
		//String型
		String s = String.valueOf(d_String); //output = 0.999999999999999
	}
}