1

コードの下に(Javaで)書くと:

Integer a =new Integer(5);
Integer b=new Integer(5);
if(a==b){
  System.out.println("In ==");
}
if(a.equals(b)){
 System.out.println("In equals");
}

私の出力は次のとおりです。「In equals」しかし、1行目と2行目を->に変更すると

Integer a =5;
Integer b=5;

次に、私のo / pは次のとおりです。

In == 
In equals

では、整数オブジェクトを作成する際の違いは何ですか? 私たちが行うとき、それはどのように作成されますInteger a =5か?

Integer a=5別のオブジェクトを作成して作成すると、a と b のオブジェクトが同じオブジェクトを参照するということInteger b=5ですか?

4

5 に答える 5

7

Integer a = 5; オートボクシングと呼ばれ、コンパイラはこの式を実際の式に変換します

Integer a = Integer.valueOf(5);

デフォルトで -128 から 127 までの小さい数値の場合、Integer.valueOf(int) は Integer の新しいインスタンスを作成しませんが、そのキャッシュから値を返します。だからここに

Integer a = 5;
Integer b= 5;

abは同じ Object を指し、a == bistrueです。

于 2013-09-04T03:32:28.600 に答える
2

Java では、新しい Integer を決して使用しないでください。これは有効な構文ですが、ご存知のように整数を宣言する最良の方法ではありません。代わりに使用してください Integer.valueOf(int) これには複数の利点があります。

不必要に余分なオブジェクトを作成していません。new 演算子を使用するたびに、ほとんどの場合必要のない新しいオブジェクトを vm に強制的に作成させます。valueOf(int) はキャッシュされたコピーを返します。整数オブジェクトは不変であるため、これはうまく機能します。これは == を使用できることを意味しますが、実際にはApache ObjectUtilsのように null セーフの比較を使用する必要があります

== 演算子は等しいかどうかをテストします。参照は、メモリ内の同じオブジェクトを参照する場合にのみ等しくなります。 equals メソッドは、2 つのオブジェクト インスタンスが互いに「同等」であることを保証します。

Integer a = new Integer(5);
Integer b = a;

a == b; // true!
a.equals(b); // true
b = new Integer(5);
a == b; // false
a.equals(b); // true

プリミティブは、それらの値が同じ場合は常に等しいです。

int a = 5; int b = a;
a == b;  // true!
于 2013-09-04T03:31:53.360 に答える
1

int等値演算子のようなプリミティブ データ型の場合、変数の値が等しいかどうかをチェックします。

オブジェクトのような参照データ型のjava.lang.Integer場合、等値演算子は、変数が同じオブジェクトを参照しているかどうかを確認します。最初のケースでは、2 つの「新しい」別々の整数オブジェクトがあるため、参照が異なります。

于 2013-09-04T03:18:45.533 に答える
0

整数ラッパーは、String クラスのいくつかのプロパティを共有します。不変であり、 intern() のような機能を使用して活用できるという点で。

これを分析します。

String a = "foo";
String b = "foo";
String c = new String("foo");
String d = new String("foo");

a == b   //true
c == d   //false

その理由は、JVM が新しい String オブジェクトを暗黙的に作成するときに、a と b の場合のように、同じ値「foo」を持つ既存の String オブジェクトを再利用するためです。

あなたの場合、JVMはintを暗黙的に自動ボックス化し、既存のIntegerオブジェクトを再利用します。Integer.valueOf()利用可能な場合、既存のオブジェクトを再利用するために明示的に使用できます。

于 2013-09-04T03:32:22.283 に答える
0

new 演算子を使用して作成すると、オブジェクト参照が作成されると思います。最初のケースでは、2 つのオブジェクト参照があり、それらは同じではありませんが、それらの値は同じです。これは、2 番目のケースの状況ではありません。

于 2013-09-04T03:33:31.407 に答える