web-dev-qa-db-ja.com

JavaにおけるIntegerとintの違いは何ですか?

例えば、なぜあなたはできるのでしょう:

int n = 9;

だがしかし:

Integer n = 9;

そしてあなたはできる:

Integer.parseInt("1");

だがしかし:

int.parseInt("1");
212
mino

intはプリミティブ型です。 int型の変数は、表したい整数の実際のバイナリ値を格納します。 intクラスではないため、メソッドがないため、int.parseInt("1")は意味がありません。

Integerはクラスであり、Java言語の他のクラスと違いはありません。 Integer store型の変数は、他の参照(オブジェクト)型と同じようにIntegerオブジェクトに参照します。 Integer.parseInt("1")は、クラスparseIntから静的メソッドIntegerへの呼び出しです(このメソッドは実際にはintではなくIntegerを返します)。

より具体的に言うと、Integerint型の単一フィールドを持つクラスです。このクラスは、ジェネリック型やNULL可能性が必要な状況など、他のオブジェクトと同様にintを扱う必要がある場合に使用されます。

Javaのすべてのプリミティブ型には、同等のラッパークラスがあります。

  • byteByteを持っています
  • shortShortを持っています
  • intIntegerを持っています
  • longLongを持っています
  • booleanBooleanを持っています
  • charCharacterを持っています
  • floatFloatを持っています
  • doubleDoubleを持っています

ラッパークラスはObjectクラスを継承し、プリミティブは継承しません。そのため、オブジェクト参照またはジェネリックと一緒にコレクションで使用できます。

Java 5以降、オートボクシングが行われ、プリミティブクラスとラッパークラス間の変換は自動的に行われます。しかし、これは微妙なバグやパフォーマンスの問題を引き起こす可能性があるので注意してください。変換について明示的であっても問題ありません。

288
Darkhogg

整数はクラス、整数はプリミティブ型です。

これらのリンクを読んでください。

31
Matjaz Muhic

整数は基本的にint型のラッパーです。 Integerクラスのすべての機能を使用して、生活を少し楽にすることができます。

もしあなたがJavaに慣れていないのであれば、あなたが理解するために学ぶべきことはJavaのドキュメントです。たとえば、 整数クラス について知りたいことはすべて詳しく説明されています。

これはIntegerクラスのドキュメントから直接抜けています:

Integerクラスは、オブジェクト内でプリミティブ型intの値をラップします。 Integer型のオブジェクトはint型の単一のフィールドを含みます。

7
Nadir Muzaffar

Int変数は32ビット符号付き整数値を保持します。 Integer(大文字のI)は、(クラス)Integer型のオブジェクト、またはnullへの参照を保持します。

Javaはこの2つの間で自動的にキャストします。 Integerオブジェクトがint演算子への引数として指定されているか、int変数に割り当てられているか、int値が整数変数に割り当てられている場合は、Integerからintへこのキャスティングはボクシング/アンボクシングと呼ばれます。

Nullを参照するInteger変数が明示的または暗黙的にボックス化解除されている場合、NullPointerExceptionがスローされます。

(上記のテキストでは、「変数」という用語はローカル変数、フィールド、またはパラメータを意味します)

6
user5585864

IntegerはJavaのラッパー型を表し、intはプリミティブ型です。 Javaのプリミティブデータ型以外のものはすべて、Javaが高度に修飾された純粋なオブジェクト指向プログラミング言語であることを意味するオブジェクトとして実装されています。必要に応じて、すべてのプリミティブ型はJavaのラッパー型としても利用できます。プリミティブ型ではパフォーマンス上の利点があるため、ラッパー型は必要なときにだけ使用してください。

下記のようにあなたの例では。

Integer n = 9;

定数9自動ボックス化されていますauto-boxingunboxingJava 5以降)からIntegerまで自動的に出現するので、そのようなステートメントとInteger n = new Integer(9)を使うことができます。これは実際にはステートメントInteger.valueOf(9).intValue();を通して達成されます。

5
Lion

intはプリミティブ型であり、オブジェクトではありません。それはそれに関連付けられたメソッドがないことを意味します。整数はメソッド(parseIntなど)を持つオブジェクトです。

最近のJavaでは、自動ボクシング(およびアンボクシング)の機能があります。つまり、コンパイラは必要に応じてInteger.valueOf(int)またはinteger.intValue()を挿入します。それは実際に書くことが可能であることを意味します

Integer n = 9;

これは次のように解釈されます

Integer n = Integer.valueOf(9);
3
Roger Lindsjö

整数はラッパークラス/オブジェクト、整数はプリミティブ型です。この違いは、int値をコレクションに格納する場合に大きな役割を果たします。これは、値としてオブジェクトのみを受け入れるためです(jdk1.4まで)。オートボクシングのためJDK 5以降はまったく別の話です。

3
kosa

Javaではintはプリミティブデータ型ですが、IntegerはHelperクラスですが、あるデータ型を他のデータ型に変換するために使用されます。

例えば:

         double doubleValue = 156.5d;
         Double doubleObject  = new Double(doubleValue);
         Byte myByteValue = doubleObject.byteValue ();
         String myStringValue = doubleObject.toString();

プリミティブデータ型は、Helperクラスが複雑でヒープメモリに格納されている最速のメモリを格納します。

「David Gassner」Java Essential Trainingからの参照。

2
Aqeel Haider

これは Java:The Complete Reference第9版から取られています

Javaは、intdoubleなどのプリミティブ型(単純型とも呼ばれる)を使用して、言語でサポートされている基本データ型を保持します。 オブジェクトではなくプリミティブ型が、パフォーマンスのためにこれらの量に使用されます。これらの値にオブジェクトを使用すると、最も単純な計算でも許容できないオーバーヘッドが追加されます。したがって、プリミティブ型はオブジェクト階層の一部ではなく、それらはObjectを継承しません。

プリミティブ型によるパフォーマンス上の利点にもかかわらず、オブジェクト表現が必要になる場合があります。たとえば、メソッドを参照してプリミティブ型を渡すことはできません。また、Javaによって実装されている標準データ構造の多くはオブジェクトを操作します。つまり、これらの(オブジェクト固有の)データ構造を使ってプリミティブ型を格納することはできません。これらの(そして他の)状況を処理するために、Javaは型ラッパーを提供します。これはオブジェクト内のプリミティブ型をカプセル化するクラスです。

ラッパークラスは、Javaのオートボクシング機能に直接関係しています。型ラッパーは、Double、Float、Long、Integer、Short、Byte、Character、およびBooleanです。これらのクラスは、プリミティブ型をJavaのオブジェクト階層に完全に統合することを可能にする幅広いメソッドを提供します。

2
Teoman shipahi

intは整数を表すプリミティブ型です。一方IntegerintをラップするObjectです。 Integerオブジェクトは、16進数、文字列などへの変換など、より多くの機能を提供します。

Integerと一緒にOOPの概念を使うこともできます。例えば、ジェネリックにはIntegerを使うことができます(すなわちCollection <Integer>)。

2
M S

Javaコードのランタイムを最適化するために、intfloatなどを含むboolプリミティブ型 が追加されましたが、それらは一緒に使用されます ラッパークラス なので、必要に応じて、それらをメンバー関数として提供される多くのユーティリティ(Integer.parseInt("1")など)と共に標準のJavaオブジェクトとして変換して使用できます。

1
anand

intはプリミティブデータ型ですが、IntegerはJavaの参照型またはラッパー型(クラス)です。

オートボクシングおよびボックス化解除の概念を導入したJava 1.5の後は、両方とも初期化できます。このようなintまたはInteger

int a= 9
Integer a = 9 // both valid After Java 1.5.

なぜInteger.parseInt("1");ではなくint.parseInt("1"); ??

Integerjdkライブラリで定義されたクラスで、parseInt()Integerクラスに属する静的メソッドです。

そのため、JavaではInteger.parseInt("1");が可能です。しかし、Javaではintはプリミティブ型です(キーワードのように仮定します)。そのため、parseInt()intで呼び出すことはできません。

1
Vikrant Kashyap