7

これらの2つの行の違いは何ですか?

    int pInt = 500;

    Integer wInt = new Integer(pInt);

または

    Integer wInt = new Integer(500);
4

7 に答える 7

18

なし。

それはまったく同じことです。最初のケースでは、補助変数しかありません。

オートボクシング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 つあれば十分です。

于 2012-11-12T07:46:13.070 に答える
8

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 テーブルへの挿入に役立ちます。nullIntegerNULLnullNULL

ラッパー クラスは、次のような場合にも役立ちます。

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
于 2012-11-12T11:17:14.523 に答える
7

初心者向け

int pInt = 500;、ここpIntではオブジェクトではありませんが、

Integer wInt = new Integer(500); wInt参考です

これは、java が純粋なオブジェクト指向言語ではない理由でもあります。javaではすべてがオブジェクトではないからです。

于 2012-11-12T07:47:43.800 に答える
2

オブジェクトが必要でない限り、プリミティブ型を使用する必要があります。
ラッパークラスはできますnullが、プリミティブ型の例:Integerできますnullintできません。

これはプリミティブ データ型の初期化です。

int pInt = 500;  

これは、同じプリミティブ データ型のラッパー クラスを作成しています。

Integer wInt = new Integer(pInt);

Java APIのラッパー クラスは、主に次の 2 つの目的を果たします。

  • プリミティブ値をオブジェクトに「ラップ」するメカニズムを提供して、オブジェクト用に予約されたアクティビティにプリミティブを含めることができるようにする (コレクションに追加する、またはオブジェクトの戻り値を持つメソッドから返すなど)。
  • プリミティブにさまざまなユーティリティ関数を提供します。これらの関数のほとんどは、さまざまな変換に関連しています。プリミティブと String オブジェクトとの間の変換、およびプリミティブと String オブジェクトと、2 進数、8 進数、16 進数などの異なる基数 (または基数) との間の変換です。

Java 1.5には、Autoboxingと呼ばれる 1 つの概念があります。オブジェクトラッパーとそのプリミティブ型の間で変換またはキャストする機能があります。

つまり、次のことを意味します。

Integer wInt = 500;
int pInt = new Integer(500);

オートボクシングが原因で発生する可能性があります。

于 2012-11-12T07:52:12.980 に答える
2

ラッパー クラスには、8 つのプリミティブ データ型、つまり byte、int、long、double、float、short、Boolean、char をカバーするボックスがあり、これらはすべてラッパー クラスでカバーされます。

int a; のように使用するプリミティブ データ型を使用する。

しかし、ラッパークラスを使用するには、 like を使用する必要がありますInteger a = new Integer(i);

于 2015-06-08T14:29:56.470 に答える
0

私が見た中で最も重要な実際の違いは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 ミリ秒しかかかりません。

于 2014-10-27T14:04:59.933 に答える