Open3

[Java]キャストと値の変換の違い

りむふぁくしりむふぁくし

Javaのキャストと値の変換
ここで言うキャストと値の変換が指すものはそれぞれ以下の通り

キャスト
String str = (String)obj;
値の変換
String str = obj.toString();
りむふぁくしりむふぁくし

キャストはプリミティブ型とインスタンスのキャストで違ってくる。
プリミティブ型のキャストはintをlongへ、byteをintへ、intをdoubleへというように値そのものの変換
インスタンスのキャストはインスタンスに指定されている型に対するコンピューターの認識を変えるもの

値の変換は文字列を整数へ、整数を文字列へ、文字列をbooleanへというように値やオブジェクト自体の形式を変えるもの。ただしプリミティブ型同士の変換は前述の通りキャストと呼ぶ。

インスタンスのキャストでは(型の認識を変えるだけなので)中身のインスタンスは同じままであるのに対し、
値のキャスト/変換は変換前と後では別々の値/インスタンスになる。変換前の値/インスタンスを基に変換後の値/インスタンスを新規で生成している。

りむふぁくしりむふぁくし

それぞれどういったときに使われるのか類型を提示すると、

  • キャスト
    • int型の上限/下限を超えないことが分かっているlong型の値をint型の変数に代入したい。
    • mapにObject型で格納されているインスタンスを取り出したが、格納されているのはXXXEntity型のインスタンスであることが分かっている。XXXEntityのメソッドがObject型のままだと使えないので、使えるようにしたい。(補足: mapの値の型が指定されておりキャスト不要でXXXEntityとして扱えるケースのほうが多い気はするが、場合によってはObject型が指定されてしまっていることが稀にある)
  • 値の変換
    • 数値がStringで受け渡されているが、これを計算するためにBigDecimalに変換したい。
    • int型の数値があるが、String型で返さないといけないのでStringに変換したい。