回答:
int
プリミティブ型です。タイプの変数はint
、表現したい整数の実際のバイナリ値を格納します。int.parseInt("1")
ので、意味がありませんint
ではないクラス、したがって、任意のメソッドを持っていません。
Integer
クラスであり、Java言語で他のどのクラスとも違いはありません。タイプの変数は、他の参照(オブジェクト)タイプと同様に、オブジェクトへの参照をInteger
格納します。クラスからの静的メソッドの呼び出しです(このメソッドは実際にはを返すのであり、を返すのではありません)。Integer
Integer.parseInt("1")
parseInt
Integer
int
Integer
より具体的にInteger
は、はタイプの単一フィールドを持つクラスint
です。このクラスはint
、ジェネリック型やnullを可能にする必要がある状況など、他のオブジェクトと同様に処理する必要がある場合に使用されます。
Javaのすべてのプリミティブ型には同等のラッパークラスがあることに注意してください。
byte
持っている Byte
short
持っている Short
int
持っている Integer
long
持っている Long
boolean
持っている Boolean
char
持っている Character
float
持っている Float
double
持っている Double
ラッパークラスはObjectクラスから継承し、プリミティブは継承しません。そのため、オブジェクト参照またはジェネリックスを含むコレクションで使用できます。
Java 5以降はオートボクシングがあり、プリミティブクラスとラッパークラス間の変換は自動的に行われます。ただし、これにより微妙なバグやパフォーマンスの問題が発生する可能性があるので注意してください。変換について明確であることは決して害を及ぼしません。
C#
、すべてのデータ型「エイリアス」と持っているint.Parse()
メイクセンスを行います(それは本当にないにもかかわらず)
C#
ここではまったく関係ありません。
Integerは、プリミティブ型intの単なるラッパーです。これにより、Integerクラスのすべての関数を使用して、生活が少し楽になります。
Javaを初めて使用する場合は、Javaのドキュメントを参考にしてください。たとえば、整数クラスについて知りたいことはすべて詳細に文書化されています。
これは、Integerクラスのドキュメントには含まれていません。
Integerクラスは、プリミティブ型intの値をオブジェクトにラップします。Integer型のオブジェクトには、int型の単一のフィールドが含まれます。
Integer
、クラスと同様に、(プリミティブ型とは異なり)コンテナに格納できます。
int変数は、32ビットの符号付き整数値を保持します。Integer(大文字のI)は、(クラス)タイプIntegerのオブジェクトまたはnullへの参照を保持します。
Javaは2つの間を自動的にキャストします。Integerオブジェクトがint演算子の引数として発生するか、int変数に割り当てられるか、またはint値がInteger変数に割り当てられるたびに、Integerからintへ。このキャストは、ボクシング/アンボクシングと呼ばれます。
nullを参照するInteger変数が明示的または暗黙的にボックス化されていない場合、NullPointerExceptionがスローされます。
(上記のテキストでは、「変数」という用語はローカル変数、フィールド、またはパラメータを意味します)
Integer
はint
プリミティブ型ですが、Javaのラッパー型を指します。Javaのプリミティブデータ型を除くすべてが、Javaを意味するオブジェクトが高度に修飾された純粋なオブジェクト指向プログラミング言語であるように実装されています。必要に応じて、すべてのプリミティブ型をJavaのラッパー型として使用することもできます。プリミティブ型を使用するとパフォーマンスが向上する可能性があるため、ラッパー型は必要な場合にのみ使用する必要があります。
あなたの例では以下のように。
Integer n = 9;
定数が9
されている自動箱入り(auto-boxing
およびunboxing
から自動的に発生java 5
以降)にInteger
、したがって、あなたはまた、とのようなステートメントを使用することができますInteger n = new Integer(9)
。これは実際にはステートメントを通じて達成されますInteger.valueOf(9).intValue();
intはプリミティブ型であり、オブジェクトではありません。つまり、それに関連付けられたメソッドはありません。Integerは、メソッド(parseIntなど)を持つオブジェクトです。
新しいJavaには、自動ボクシング(およびアンボクシング)の機能があります。つまり、コンパイラーは必要に応じてInteger.valueOf(int)またはinteger.intValue()を挿入します。それは実際に書くことが可能であることを意味します
Integer n = 9;
これは次のように解釈されます
Integer n = Integer.valueOf(9);
Integerはラッパークラス/オブジェクトで、intはプリミティブ型です。この違いは、コレクションにint値を格納する場合に大きな役割を果たします。これは、オブジェクトが値としてのみ受け入れられるためです(jdk1.4まで)。オートボクシングのため、JDK5以降はまったく別の話です。
Integer.valueOf(i)
かInteger.intValue()
、あなたのために。Collection<int>
それでも動作しません。だから、それはまったく異なる話ではありません-それは同じ話であり、ほんの少しの省略形です。
Javaでは、intはプリミティブデータ型ですが、Integerはヘルパークラスです。これは、あるデータ型を別のデータ型に変換するために使用されます。
例えば:
double doubleValue = 156.5d;
Double doubleObject = new Double(doubleValue);
Byte myByteValue = doubleObject.byteValue ();
String myStringValue = doubleObject.toString();
プリミティブデータ型は、ヘルパークラスが複雑な場合に利用可能な最速のメモリを格納し、ヒープメモリに格納します。
「David Gassner」Java Essential Trainingからの参照。
これは、Java:The Complete Reference、Ninth Editionからの引用です。
Javaはintやdoubleなどのプリミティブ型(単純型とも呼ばれます)を使用して、言語でサポートされている基本的なデータ型を保持します。これらの量には、パフォーマンスのために、オブジェクトではなくプリミティブ型が使用されます。これらの値にオブジェクトを使用すると、最も単純な計算でさえ許容できないオーバーヘッドが追加されます。したがって、プリミティブ型はオブジェクト階層の一部ではなく、Objectを継承しません。
プリミティブ型が提供するパフォーマンス上の利点にもかかわらず、オブジェクト表現が必要になる場合があります。たとえば、メソッドへの参照によってプリミティブ型を渡すことはできません。また、Javaによって実装される標準のデータ構造の多くはオブジェクトで動作します。つまり、これらの(オブジェクト固有の)データ構造を使用してプリミティブ型を格納すること はできません。これらの(およびその他の)状況を処理するために、Javaはタイプラッパーを提供します。これは、オブジェクト内のプリミティブ型をカプセル化するクラスです。
ラッパークラスは、Javaのオートボクシング 機能に直接関連しています。タイプラッパーは、Double、Float、Long、Integer、Short、Byte、Character、およびBooleanです。これらのクラスは、プリミティブ型をJavaのオブジェクト階層に完全に統合できるさまざまなメソッドを提供します。
Javaコードの実行を最適化するには、int
プリミティブ型は、(S)を含む追加されているfloat
、bool
などが、彼らはそこに一緒に来るラッパークラス必要な場合は、そのメンバーとして来て、多くのユーティリティと一緒に、標準のJavaオブジェクトとしてそれらを変換して使用することができますので、関数(などInteger.parseInt("1")
)。
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");
か?
Integer
jdk
ライブラリで定義されたクラスでparseInt()
あり、静的メソッドはInteger
クラスに属しています
したがって、Integer.parseInt("1");
Javaで可能です。しかしint
、Javaではプリミティブ型(キーワードのように想定)です。だから、あなたは呼び出すことはできませんparseInt()
とint
。