34

それらの違いは何ですか?

l整数型の配列リストです。

バージョン1:

int[] a = new int[l.size()];
for (int i = 0; i < l.size(); i++) {
    a[i] = l.get(i);
}
return a;

バージョン2:

int[] a = new int[l.size()];
for (int i = 0; i < l.size(); i++) {
    a[i] = l.get(i).intValue();
}
return a;
4

8 に答える 8

52

l.get(i);が返さIntegerれ、それを呼び出すとintValue();、整数がタイプとして返​​されintます。

をに変換するintことをボクシングIntegerと呼びます。toへの 変換 は、他のプリミティブ型とそれに対応するWrapperクラス間の変換のために、アンボクシングなどと呼ばれます。
Integerint

java 5以降、必要な変換(オートボクシング)が自動的に行われるため、Java 5以降を使用している場合は、例に違いはありません世話をしなければならない唯一のことは、anIntegerがnullの場合であり、それを直接割り当てると、intNullPointerExceptionがスローされます。

java 5より前は、プログラマー自身がボクシング/アンボクシングを行う必要がありました。

于 2012-07-15T08:13:14.783 に答える
9

お気づきのように、intValueがあることが既にわかっている場合、 はあまり役に立ちませんInteger。ただし、このメソッドは では宣言されていませんがInteger、一般的なNumberクラスで宣言されています。を持っていることしか知らない状況ではNumber、その方法の有用性に気付くでしょう。

于 2012-07-15T08:21:07.603 に答える
5

l.get(i)によって返されるオブジェクトは、 Integerクラスのインスタンスです。

intValue()は、プリミティブintを返すIntegerクラスのインスタンスメソッドです。

Javaリファレンスドキュメントを参照してください... http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#intValue()

于 2012-07-15T08:15:11.430 に答える
3

Java は、最初はプリミティブ、2 番目はオブジェクトの 2 種類の構造をサポートします。

あなたが求めているメソッドは、オブジェクトからプリミティブに値を取得するために使用されます。

数値を表すすべての Java 型は、クラスNumberを拡張します。[autoboxing] が Java 1.5 で実装されて以来、同じプリミティブ型とオブジェクト型を使用する場合、このメソッドは何らかの形で非推奨になります。

int - プリミティブ

整数 - オブジェクト

Java 1.5 より前は、強制的に書く必要がありました

int i = integer.intValue();

Java 1.5以降、私たちは書くことができます

int i = integer;

これらのメソッドは、タイプを Integer から long に変更する必要がある場合にも使用されます

long l = integer.longValue();

于 2012-07-15T08:25:13.830 に答える
2

次の例を検討してください。

Integer i = new Integer(10);
Integer j = new Integer(10);
if (!(i == j)) {
    System.out.println("Surprise, doesn't match!");
}
if (i.intValue() == j.intValue()) {
    System.out.println("Cool, matches now!");
}

印刷する

Surprise, doesn't match!
Cool, matches now!

重要な意味を持っていることを証明していintValue()ます。Java ではプリミティブ型をコンテナーに直接格納することが許可されておらず、格納されている値を頻繁に比較する必要があるためです。例えば:

oneStack.peek() == anotherStack.peek() 

以下のステートメントは、回避策のように機能しますが、通常は期待どおりに機能しません。

oneStack.peek().intValue() == anotherStack.peek().intValue()
于 2018-11-28T04:03:36.157 に答える
1

get(i)Integerオブジェクトを返し、呼び出すとその値を取得しますintValue()。最初の場合、自動的にauto-unboxing発生します。

于 2012-07-15T08:13:36.663 に答える
0

のオブジェクトからプリミティブ値を取得するための便利なメソッドですNumber: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Number.html

次のコードを検討してください。

Integer integerValue = Integer.valueOf(123);
float floatValue = integerValue.floatValue();

最後の行は便利な方法です。

float floatValue = (float)(int)integerValue;

Java の任意の数値型は他のプリミティブ数値型に明示的にキャストできるため、Numberクラスはこれらすべての変換を実装します。いつものように、それらのいくつかはあまり意味がありません:

Integer integerValue = Integer.valueOf(123);
int intValue = integerValue.intValue();
int intValue2 = (int)integerValue;
int intValue3 = integerValue;
于 2012-07-15T08:17:05.880 に答える
0

それらはまったく同じです。Integer他のポスターが述べたように、オブジェクトまたはintプリミティブのいずれかを配列に入れることができます。最初のケースでは、コンパイラは自動的にIntegerオブジェクトをプリミティブに変換します。これはオートボクシングと呼ばれます。

于 2012-07-15T08:19:08.587 に答える