Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java入門】Java 9のJShellでラッパーオブジェクトを作成する方法をわかりやすく解説

ラッパークラスとは

Javaのすべてのプリミティブ型(int、doubleなど)には、それに対応する組み込みのラッパークラスが用意されており、これらのクラスはすべてイミュータブル(不変)として設計されています。代表例としては、IntegerFloatDoubleByteなどが挙げられます。

コードの中でラッパークラスを活用する主なメリットは次のとおりです。

  • 対応するプリミティブ型に関する型情報(最大値・最小値・サイズなど)へアクセスできる
  • プリミティブ型の値が自動的にオブジェクト参照型へ変換されるオートボクシング(Auto-Boxing)を利用できる
  • コレクションなどのデータ構造の中でプリミティブ型の値を扱えるようになる

ラッパーオブジェクトの作成方法

ラッパークラスのインスタンスは、new演算子を使って生成できます。さらに、Integerなどの各型が提供するvalueOf()メソッドを利用してラッパーオブジェクトを作成することも可能です。

Integer.valueOf()メソッドは、ヒープ上に同じ値を持つ既存のIntegerオブジェクトが存在する場合、新たにオブジェクトを生成せずに既存オブジェクトへの参照を再利用します。同じ値のオブジェクトが見つからない場合にのみ、新しいIntegerオブジェクトを作成してその参照を返します。なお、Java 9以降ではnew Integer(...)のようなコンストラクタの使用は非推奨(deprecated)となっているため、特別な理由がない限りvalueOf()メソッドを使うことが推奨されています。

以下のコード例では、JShellツール上で実際にラッパーオブジェクトを作成しています。

JShellでの実行例

スニペット1:new演算子とvalueOf()の違い

jshell> Integer int1 = new Integer(10);
int1 ==> 10

jshell> Integer int2 = new Integer(10);
int2 ==> 10

jshell> Integer int3 = Integer.valueOf(10);
int3 ==> 10

jshell> Integer int4 = Integer.valueOf(10);
int4 ==> 10

jshell> int1 == int2;
$7 ==> false

jshell> int3 == int4;
$8 ==> true

スニペット2:オートボクシングとIntegerクラスの定数

jshell> Integer abc1 = Integer.valueOf(700);
abc1 ==> 700

jshell> Integer abc2 = 700;
abc2 ==> 700

jshell> Integer abc3 = 700;
abc3 ==> 700

jshell> abc2 == abc3
$4 ==> false

jshell> Integer.MAX_VALUE
$5 ==> 2147483647

jshell> Integer.MIN_VALUE
$6 ==> -2147483648

jshell> Integer.SIZE
$7 ==> 32

jshell> Integer.BYTES
$8 ==> 4

実行結果のポイント

  • new演算子は呼び出すたびに必ず新しいオブジェクトを生成します。そのため、値が同じでも参照は異なり、int1 == int2の結果はfalseになります。
  • valueOf()メソッドは内部的にキャッシュ(デフォルトでは-128〜127の範囲)を保持しており、この範囲内の値については既存オブジェクトを再利用します。そのためint3 == int4の結果はtrueとなり、メモリ効率も向上します。
  • スニペット2の700はキャッシュ範囲外のため、オートボクシングによって生成されたabc2abc3は別々のオブジェクトとなり、比較結果はfalseです。
  • ラッパーオブジェクト同士の値を比較する場合は、==ではなくequals()メソッドを使用することが推奨されます。
  • また、IntegerクラスにはMAX_VALUE(int型の最大値)、MIN_VALUE(最小値)、SIZE(ビット数)、BYTES(バイト数)といった便利な定数が定義されており、プリミティブ型の仕様情報を手軽に取得できます。
  1. Java 9のJShellでクラスとオブジェクトを作成する方法をわかりやすく解説

    JShellは、Java 9で新たに導入されたJavaシェルツールです。Java初の公式REPL(Read-Evaluate-Print-Loop:読み込み・評価・出力・繰り返し)アプリケーションとして提供されています。このツールを活用すると、ステートメント、ループ、式などの簡単なJavaプログラムやロジックを、その場で実行・評価することが可能です。Java REPLはコマンドプロンプト上で手軽なプログラミング環境を提供し、入力されたコードを読み取り、評価し、その結果を出力します。コンパイルやクラスファイルの作成を意識することなく、対話形式でJavaコードを試せるのが大きな特徴です。以下の例で

  2. Javaで一時ファイル(テンポラリファイル)を作成する方法

    プログラムの実行中に、一時的な情報を保存するためにその場で一時ファイルを作成し、後から削除したいケースはよくあります。 Javaでは、Files.createTempFile() メソッドを使用することで、簡単に一時ファイルを作成できます。 一時ファイルの作成 次の例では、Files.createTempFile(prefix, suffix) を使って一時ファイルを作成しています。 import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; public class CreateTem