13

オートボクシングは、私が書くことができるという事実に帰着するようです:

Integer i = 0; 

それ以外の:

Integer i = new Integer(0);

したがって、コンパイラはプリミティブをオブジェクトに自動的に変換できます。

それがアイデアですか?何でこれが大切ですか?

4

9 に答える 9

17

あなたはそれを少し単純化しすぎました。

コレクションを使用する場合も、オートボクシングが有効になります。Sun の Java ドキュメントで説明されているように:

コレクションはオブジェクト参照のみを保持できるため、プリミティブ値を適切なラッパー クラスにボックス化する必要があります。...コレクションからオブジェクトを取り出すと、入れた整数が得られます。int が必要な場合は、intValue メソッドを使用して Integer をアンボックスする必要があります。このボックス化とボックス化解除はすべて面倒であり、コードが乱雑になります。自動ボックス化およびボックス化解除機能により、プロセスが自動化され、手間と煩雑さが解消されます。

では、いつオートボクシングとアンボクシングを使用する必要がありますか? 数値をコレクションに入れる必要がある場合など、参照型とプリミティブの間に「インピーダンスの不一致」がある場合にのみ使用してください。科学計算やその他のパフォーマンスが重要な数値コードにオートボクシングとアンボクシングを使用することは適切ではありません。Integer は int の代わりにはなりません。autoboxing と unboxing は、プリミティブ型と参照型の区別をあいまいにしますが、それをなくすわけではありません。

オートボクシングの概要

于 2009-04-20T00:20:23.337 に答える
10

ところで

Integer i = 0;

と同等です

Integer i = Integer.valueOf(0);

違いは、valueOf() が -128 から 127 の間の値に対して新しいオブジェクトを作成しないことです (明らかに、Java 6u14 の場合、これは調整可能です)。

于 2009-04-20T06:51:42.130 に答える
5

次のようなコードを書くことができるように存在します

List<Integer> is = new ArrayList<Integer>();
is.add(1); // auto-boxing
is.add(2);
is.add(3);

int sum = 0;
for (int i : is)  // auto-unboxing
{
    sum += i;
}

単一の整数の場合、デフォルトでは Integer ではなく int 型を使用する必要があります。整数は主にコレクションで使用されます。

Long は Integer と同じ値 (equals() を使用) とは異なりますが、long としては int (== を使用) と等しいことに注意してください。

于 2009-04-20T10:53:21.707 に答える
3

そういう考えです、はい。ただし、Integer を int に代入できるとさらに便利です。

オートボクシングは原因ではなく症状に対処していると主張することができます. 混乱の本当の原因は、Java の型システムに一貫性がないことです。プリミティブとオブジェクト参照の両方が必要なのは、人為的で扱いにくいものです。オートボクシングはそれをいくらか軽減します。

于 2009-04-20T00:24:22.000 に答える
2

私の冷笑的な帽子をかぶって: 元の Java (ここでは Oak を意味します) 仕様の制限を補うために。初めてだけではありません。

于 2009-04-20T00:22:11.070 に答える
1

より読みやすく、よりきれいなコードになります。特に操作を行っている場合 (Java には演算子のオーバーロードがないため)。

于 2009-04-20T00:19:03.137 に答える
1

Joshua Bloch の『Effective Java』を読んで覚えていることから、ボックス化された対応物よりもプリミティブを検討する必要があります。副作用を考慮せずにオートボクシングを行うと、問題が発生する可能性があります。

于 2009-04-20T00:24:49.940 に答える
1

Adding to Lim's comment, primitives are stored on the stack, and primitive-wrappers, as objects, are stored on the heap... There are subtle implications due to this.

于 2009-04-20T00:29:30.740 に答える