Java FAQ:型変換のまとめ

  • 数値 -> 文字列: String.valueOf(x) か new Integer(i).toString() か Integer.toString(i) など
  • 数値 -> n進数の文字列: Integer.toBinaryString(i), Integer.toOctalString(i), Integer.toString(i, n), Integer.toHexString(i) など
  • 数値オブジェクト -> n進数の文字列: obj#intValue() などでプリミティブ型に落してから、Integer.toBinaryString(i), Integer.toOctalString(i), Integer.toString(i, n), Integer.toHexString(i) など
  • オブジェクト -> 文字列: obj#toString()
  • 文字列 -> 数値: Integer.parseInt(s), Double.parseDouble(s) など
  • 文字列 -> 数値 n進数として: Integer.parseInt(s, n) など (ただし、"0x10" など prefix がついたものは読めない)
  • 文字列 -> 数値オブジェクト n進数として: Integer.decode(s) ("0x10" など prefix がついたものが読める)
  • 数値オブジェクト -> 数値: obj#intValue() など
  • 数値 -> 数値オブジェクト: new Integer(i) など

気がついた点

  • Java FAQ には文字列をn進数として変換するという項目がない?
  • Boolean の *Value() には Boolean.booleanValue() しかない
  • Character の *Value() には Character.charValue() しかない
  • 数値 -> 文字列は、プリミティブ型からのパスしか用意されていない(といっても、単純な変換は obj#toString() すれば良いだけだが)
  • parse* はプリミティブ型に、Integer.decode(s) は数値オブジェクトに変換されるという違いがなぜかある
  • Integer.parseInt(s, n) で n進数として読む場合には、"0x10" など prefix がついたものは読めないし、prefix がついたものが読める Integer.decode(s) では(自動判定なので) n進数として読むという指定ができない
  • 2進数に対応するリテラルがない