2

で使用intしていfor-loopます。以下のように:

for (int i = 0; i < 100 ; i++) {
     //Do something...
}

Integer以下のように の代わりに使用するとint、違いはありますか?

for (Integer i = 0; i < 100 ; i++) {
     //Do something...
}
4

8 に答える 8

5

はい、反復ごとに自動ボックス化解除と自動ボックス化が必要になります。同じように機能し、機能させるために何もする必要はありませんが、不要であり、簡単に回避できます。

また、実際の利点がないために、ループがわずかに遅くなる可能性があります。

基本的には、数値をInteger実際に にする必要がObjectある場合にのみ使用する必要があります(たとえば、コレクションに入れるとき、nullが有効な値である場合など)。それ以外の場合は、可能な限りプリミティブ型 ( intchar、 ...) を使用する必要があります。

于 2013-10-09T10:34:09.167 に答える
3

intとの違いはすでにご存じだと思いますInteger
ループは同じように動作しintますが、不要な場合は使用することをお勧めしますInteger。そうしないでください、それは時間を無駄にします(「i」を大文字にして「eger」を追加します:))。さらに、自動アンボックス化/自動ボックス化が反復ごとに行われるため、効率的ではありません。

intなしで生活できる場合に使用しますInteger

于 2013-10-09T10:33:51.347 に答える
3

私はできる限り、常にラッパーよりもプリミティブを選択します。

あなたのコードは正常に動作します。

しかし、非常にわずかな違いではありますが、

実行時に、 Wrappers Boxing 変換Unboxing 変換を使用すると、実行時に明らかに時間がかかります。

p が int 型の値である場合、ボックス化変換は、r.intValue() == p のように、p をクラスと型 Integer の参照 r に変換します。

逆に、 を使用すると、この時間が保存されますPrimitives

于 2013-10-09T10:34:53.150 に答える
2

そのようなシナリオで使用することを考えることができる唯一の大きなことは(私は自分でそれを行うことはありませんし、あなたにもそれを行うようにアドバイスすることはありません)

for (Integer i = 0; i < 100 ; i++) {
     i = null; // Can do this here but not in the other loop
     // Obviously this is not going to be the only line here, unless you wanna get a NPE
     // Just something, which you COULD DO
}

これ以外に、それが大きな問題になるかどうかは本当に疑問です. 使用することintが好ましいですが。また、反復ごとのボクシングとオートボクシングは良いことではありません(int直接使用できる場合)。

于 2013-10-09T10:34:07.183 に答える
2

を使用Integerすると、ボクシングによるパフォーマンス コストが発生するため、 を使用しますint

ただし、iループ本体内でハッシュ マップ キーなどとして使用する場合は、参照型を使用しますInteger

于 2013-10-09T10:35:55.440 に答える
1

Java 5 の機能であるAutoboxing と Unboxingのおかげで、そうではありません。

于 2013-10-09T10:33:27.910 に答える
1

いいえ、機能に違いはありません。自動ボックス化および自動ボックス化解除機能によりi++、ループ内で役立ちます

于 2013-10-09T10:33:47.723 に答える
-1

いいえ、そうではありません。プリミティブ型Integerに機能を追加するラッパーです。intその機能を使用しない場合は、 に固執することをお勧めしますint

この場合、大きな違いはないかもしれませんが、 の Integer[]代わりにsay を使用すると仮定すると、多くint[]のメモリと速度を浪費することになります。

于 2013-10-09T10:35:33.567 に答える