で使用int
していfor-loop
ます。以下のように:
for (int i = 0; i < 100 ; i++) {
//Do something...
}
Integer
以下のように の代わりに使用するとint
、違いはありますか?
for (Integer i = 0; i < 100 ; i++) {
//Do something...
}
はい、反復ごとに自動ボックス化解除と自動ボックス化が必要になります。同じように機能し、機能させるために何もする必要はありませんが、不要であり、簡単に回避できます。
また、実際の利点がないために、ループがわずかに遅くなる可能性があります。
基本的には、数値をInteger
実際に にする必要がObject
ある場合にのみ使用する必要があります(たとえば、コレクションに入れるとき、null
が有効な値である場合など)。それ以外の場合は、可能な限りプリミティブ型 ( int
、char
、 ...) を使用する必要があります。
int
との違いはすでにご存じだと思いますInteger
。
ループは同じように動作しint
ますが、不要な場合は使用することをお勧めしますInteger
。そうしないでください、それは時間を無駄にします(「i」を大文字にして「eger」を追加します:))。さらに、自動アンボックス化/自動ボックス化が反復ごとに行われるため、効率的ではありません。
int
なしで生活できる場合に使用しますInteger
。
私はできる限り、常にラッパーよりもプリミティブを選択します。
あなたのコードは正常に動作します。
しかし、非常にわずかな違いではありますが、
実行時に、 Wrappers Boxing 変換 とUnboxing 変換を使用すると、実行時に明らかに時間がかかります。
p が int 型の値である場合、ボックス化変換は、r.intValue() == p のように、p をクラスと型 Integer の参照 r に変換します。
逆に、 を使用すると、この時間が保存されますPrimitives
。
そのようなシナリオで使用することを考えることができる唯一の大きなことは(私は自分でそれを行うことはありませんし、あなたにもそれを行うようにアドバイスすることはありません)
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
直接使用できる場合)。
を使用Integer
すると、ボクシングによるパフォーマンス コストが発生するため、 を使用しますint
。
ただし、i
ループ本体内でハッシュ マップ キーなどとして使用する場合は、参照型を使用しますInteger
。
Java 5 の機能であるAutoboxing と Unboxingのおかげで、そうではありません。
いいえ、機能に違いはありません。自動ボックス化および自動ボックス化解除機能によりi++
、ループ内で役立ちます
いいえ、そうではありません。プリミティブ型Integer
に機能を追加するラッパーです。int
その機能を使用しない場合は、 に固執することをお勧めしますint
。
この場合、大きな違いはないかもしれませんが、 の
Integer[]
代わりにsay を使用すると仮定すると、多くint[]
のメモリと速度を浪費することになります。