2012-02-17 2 views
3

私は、コードの誰かがしばらく前に書いて、私はループIntegerからintValueを取得すると、意味がありますか?

int runUID = runUidsAL.get(i).intValue(); 

の一部がありますよう

List<Integer> runUids = new ArrayList<Integer>(); 

以降にあると仮定すると、ここで

を何かが足りないのですかどうかを疑問に思って探していますintValue()をここで呼び出す必要がある理由は何ですか?それがここで必要とは思わないでください。あなたは?

+0

これは、JDKのバージョンが使用されているものに依存します。 – adatapost

+0

runUIDのタイプは何ですか?それは整数か整数か? JDKのバージョンは何ですか? – kosa

+0

@thinksteepそれは少なくともJDK 5です。さもなければ、彼はジェネリックを使うことができません。それは少なくともJDK 5であるため、オートボクシングも利用可能になります。 – Jesper

答えて

8

あなたはそう言っていませんが、runUIDintと仮定しています。

runUidsAL.get(i)によって返されたIntegerオブジェクトでは、intValue()を明示的に呼び出す必要はありません。 Javaはauto-unboxingによって自動的にこれを行います。

+0

しかし、runUIDが' Integer'の場合、これは参照値を代入するのではなくコピーを作成します(この場合、 'Integer'は不変です。 127あなたはとにかく同じ参照を取得しようとしています) –

+0

ああ - 私は同意します - IMHOそれは*インテント*を表示する理由です。明示的な方が常に良いです。私はちょうど 'runUID'が'整数 ' –

+0

であれば少しの違いがあることを指摘していました。 runUIDがIntegerの場合、javaは新しいIntegerインスタンスを作成して、既存のIntegerインスタンスに別の参照を追加するのではなく、intValue()の結果をラップするため、実際にはintValue()を呼び出すのが最悪です。 –

0

たとえば、Integerオブジェクトではなく長いオブジェクトにintを割り当てることができます。一方、Integerオブジェクトがnullの場合、intValue()はNullPointerExceptionを返す可能性があります。

+0

自動アンボックスは、同じ 'NullPointerException'をスローします。それは喜んで自動的に '長い'にunboxします。 '整数i = 5; longU = i; ' –

1

Java 1.5以上では、自動ボクシングとアンボクシングがサポートされています。これは、を使用せずにをintに割り当てることができます。

1

整数がオブジェクトであり、intがプリミティブです。

intValue()メソッドは、クラスをそのプリミティブ表現に変換します。整数

http://mindprod.com/jgloss/intvsinteger.html

+0

はい、ただし、runUIDが 'int'の場合、自動アンボックスのために' intValue() 'を呼び出さずに同じ結果が得られます。 –

+0

これは当てはまりますが、コードを読むときにはより明確になります。コード "if(i!= 0)"とコード "if(i)"を考えてみましょう。彼らはどちらも同じですが、何が起こっているのかを理解するのが速いだけです。パフォーマンス(自動アンボクシングと手動アンボクシング)が同じであれば、コードを読むほうが簡単です。 –

+0

このコメントは、他の回答から削除する前に返信したので、私はそれに同意します。しかし...それはこの答えではありません。 –

2

整数数を拡張するので、それがあります。

二行目は、nからint型の値が必要になることがあり、そしてnは整数またはダブルでインスタンス化された場合は知らないかもしれない
Number n = new Integer(5); 

int i = n.intValue(); 

。私は数分前に住んでいた

0

実際の状況:

私はIntegerオブジェクトのリストを持っています。各整数は、位置を削除したい他のリストのインデックスです。

その後...私はそれをやっていた:

public E remove(int location); 

マイ "historyRecord" リストwasn:

for (Integer index : positionsToRemoveList) { 

    historyRecord.remove(index); 
} 

Javaは、次の方法に

public boolean remove(Object object); 

の代わりを呼んでいましたJavaが位置によってではなくオブジェクトによって削除しようとしていたbeacuseを更新しています。

for (Integer index : positionsToRemoveList) { 

    historyRecord.remove(index.intValue()); 
} 

そして、これが私の本当の話です:

正しい方法がある)

関連する問題