これらの2つの行の違いは何ですか?
int pInt = 500;
と
Integer wInt = new Integer(pInt);
または
Integer wInt = new Integer(500);
これらの2つの行の違いは何ですか?
int pInt = 500;
と
Integer wInt = new Integer(pInt);
または
Integer wInt = new Integer(500);
なし。
それはまったく同じことです。最初のケースでは、補助変数しかありません。
オートボクシングint
では、変数と変数の両方が必要になることはめったにないことに注意してくださいInteger
。したがって、ほとんどの場合、これで十分です。
int pInt = 500;
Integer が役立つ主なケースは、変数が不明な場合 (つまりnull
)を区別することです。
Integer i = null; // possible
int i = null; // not possible because only Object variables can be null
ただし、変数を 2 つ保持しないでください。1 つあれば十分です。
Java では、プリミティブ クラスのインスタンスはインスタンスの実際の値を保持しますが、ラッパー クラスのインスタンスはオブジェクトへの参照を保持します。すなわち、オブジェクトが見つかる場所の住所。
この行を使用してプログラムを作成すると、次のようになります。
Integer integer = 500;
コンパイラはこれを次のように変更します。
Integer integer = new Integer(500);
このプロセスは、オートボクシングと呼ばれます。これは、プリミティブ インスタンスを整数の「ボックス」に自動的に配置することです。したがって、次のプログラムの出力:
public class PrimitiveToObject {
public static void main(String[] args) {
printClassName(1);
printClassName(1L);
printClassName((char)1);
}
public static void printClassName(Object object){
System.out.println(object.getClass());
}
}
これは:
class java.lang.Integer
class java.lang.Long
class java.lang.Character
これも:
int i = integer;
これに変わります:
int i = integer.intValue();
これはボックス化解除と呼ばれます。
上記のように、ドット演算子( .
) は名前付きの変数で使用されていますが、変数では使用されてinteger
いませんi
。つまり、ラッパーのオブジェクトは逆参照できますが、プリミティブ インスタンスはできません。
ボックス化とボックス化解除により、プログラムの速度が少し低下する場合があります。したがって、初心者にとっては、ラッパーは追加の負担のように見えるかもしれませんが、そうではありません。ラッパーは、オブジェクトを参照型にする必要がある場所で使用されます。例:Map<Integer,String>map=new HashMap<Integer,String>();
は有効なステートメントですが、有効なステートメントでMap<int,String>map=new HashMap<int,String>();
はありません。
ラッパーが非常に役立つもう 1 つの典型的なケース:
MySQL では、型NULL
の列の有効なエントリですINT
。しかし、Java では、値をint
持つことはできません。これは、SQL ではNot Availableを表すためです。したがって、JDBC を使用して MySQL テーブルに整数値を挿入する場合、Java プログラムの はMySQL テーブルへの挿入に役立ちます。null
Integer
NULL
null
NULL
ラッパー クラスは、次のような場合にも役立ちます。
Boolean decision; // Using wrapper for boolean.
if("YES".equalsIgnoreCase(consent))
decision = Boolean.TRUE; // In favour
else if("NO".equalsIgnoreCase(consent))
decision = Boolean.FALSE; // Not in favour
else if("CAN'T SAY".equalsIgnoreCase(consent))
decision = null; // Undecided
初心者向け
int pInt = 500;
、ここpInt
ではオブジェクトではありませんが、
Integer wInt = new Integer(500);
wInt
参考です
これは、java が純粋なオブジェクト指向言語ではない理由でもあります。javaではすべてがオブジェクトではないからです。
オブジェクトが必要でない限り、プリミティブ型を使用する必要があります。
ラッパークラスはできますnull
が、プリミティブ型の例:Integer
できますnull
、int
できません。
これはプリミティブ データ型の初期化です。
int pInt = 500;
これは、同じプリミティブ データ型のラッパー クラスを作成しています。
Integer wInt = new Integer(pInt);
Java APIのラッパー クラスは、主に次の 2 つの目的を果たします。
Java 1.5には、Autoboxingと呼ばれる 1 つの概念があります。オブジェクトラッパーとそのプリミティブ型の間で変換またはキャストする機能があります。
つまり、次のことを意味します。
Integer wInt = 500;
int pInt = new Integer(500);
オートボクシングが原因で発生する可能性があります。
ラッパー クラスには、8 つのプリミティブ データ型、つまり byte、int、long、double、float、short、Boolean、char をカバーするボックスがあり、これらはすべてラッパー クラスでカバーされます。
int a; のように使用するプリミティブ データ型を使用する。
しかし、ラッパークラスを使用するには、 like を使用する必要がありますInteger a = new Integer(i);
私が見た中で最も重要な実際の違いはInteger
、初期化と計算の実行が より遅いことですint
。必要がなければ避けますInteger
。
int x = 20_000_000;// 20 millions
for (int i = 0; i < x; i++) {
ix += 23;
}
ix が Integer の場合、ループを完了するのに 138 ミリ秒 (50 回の試行の平均) かかりますが、ix が int の場合は 10 ミリ秒しかかかりません。