プログラム言語では、文字から数、数から文字への変換が頻繁に出現します。
Javaのプリミティブ型の8つラッパークラス(Byte,Short,Integer,Long,Float,Double,Character,Boolean)のデフォルトコンストラクタには、
全て文字列を引数としてオブジェクトのインスタンスを生成できるようになっています。
文字列から数値への変換を数値から文字列の変換には、ラッパークラスで実現します。
文字列を数値に変換する場合には、数値の範囲に対応するラッパークラスを利用します。
ラッパークラス( "数値を示す文字列" );
オブジェクトの生成
Byte byteObj = new Byte("10");
Short shortObj = new Short("10");
Integer integerObj = new Integer("10");
Long longObj = new Long("10");
Float floatObj = new Float("10.001");
Double doubleObj = new Double("10.00001");
System.out.println("Byte:" + byteObj);
System.out.println("Short:" + shortObj);
System.out.println("Integer:" + integerObj);
System.out.println("Long:" + longObj);
System.out.println("Float:" + floatObj);
System.out.println("Double:" + doubleObj);
Oracle社Java8APIのNumberクラスから6つの数値型のラッパークラス (Byte,Short,Integer,Long,Float,Doube)のAPIを確認して下さい。
文字列からラッパークラスを生成する方法に各ラッパークラスのクラスメソッドvalueOfもあります。
ラッパークラス.valueOf( "数値を示す文字列" );
オブジェクトの生成2
Byte byteObj = Byte.valueOf("10");
Short shortObj = Short.valueOf("10");
Integer integerObj = Integer.valueOf("10");
Long longObj = Long.valueOf("10");
Float floatObj = Float.valueOf("10.001");
Double doubleObj = Double.valueOf("10.00001");
System.out.println("Byte:" + byteObj);
System.out.println("Short:" + shortObj);
System.out.println("Integer:" + integerObj);
System.out.println("Long:" + longObj);
System.out.println("Float:" + floatObj);
System.out.println("Double:" + doubleObj);
コンストラクタとvalueOfどちらを利用すべきかは、10進数表記であればどちらでもコスト(生成速度)に差はありません。
TechScoreBlogよりオブジェクトの生成速度の差を検証
10進数表記以外で文字列データが保存されている場合には、基数を指定できるvalueOf(String 数値文字, int 基数)を利用します。
数値型のラッパークラスを生成できればプリミティブ型の変換はとても簡単です。
Oracle社Java8APIのNumberクラスのAPIをご覧ください。
abstractメソッドでdobuleValue(),floatValue(),intValue(),longValue()が定義されています。
abstractメソッドは抽象メソッドと呼び、親クラスで定義された場合には、その親クラスを継承(extends)する子クラスのメンバーメソッドに
必ずabstractメソッドのメソッドの処理を記載する必要があります。
この事から、6つの数値型のラッパークラスは、メンバーメソッドdobuleValue(),floatValue(),intValue(),longValue()が提供されています。
更にNumberクラスでbyteValue(),shortValue()も実装されているので子クラスであるラッパークラスも利用可能です。
インスタンス.intValue();
プリミティブ型への変換
byte byteNumber = new Byte("10").byteValue();
short shortNumber = new Short("10").shortValue();
int intNumber = new Integer("10").intValue();
long longNumber= new Long("10").longValue();
float floatNumber = new Float("10.001").floatValue();
double doubleNumber = new Double("10.00001").doubleValue();
System.out.println("byte:" + byteNumber);
System.out.println("short:" + shortNumber);
System.out.println("integer:" + intNumber);
System.out.println("long:" + longNumber);
System.out.println("float:" + floatNumber);
System.out.println("double:" + doubleNumber);
Integer.parseInt("数値を示す文字列");
文字列から数への変換
byte byteNumber = Byte.paraseByte( "10" );
short shortNumber = Short,parseShort( "10" );
int intNumber = Integer.parseInt( "10" );
long longNumber= Long.parseLong( "10" );
float floatNumber = Float.parseFloat("10.001");
double doubleNumber = Double.parseDouble("10.00001");
ラッパークラスのインスタンス.intValue()又はラッパークラスのクラスメソッドInteger.parseInt("文字列")のどちらでも大きなコスト差は無いので、
チームで開発する場合には、ルールベースでどちらかに寄せます。新規の開発であればどちらでも良いです。
継続したシステムの改修案件の場合には、表記方法を改修前と運用性を高めるため合わせるべきです。