とどうparseInt()
違うのvalueOf()
?
彼らは私にはまったく同じことをしているように見えます(、、などにも当てはまりparseFloat()
ますがparseDouble()
、parseLong()
それらはどのように違うのLong.valueOf(string)
ですか?
また、これらのうちどれが好ましく、慣例により頻繁に使用されますか?
そうですね、 の API は、Integer.valueOf(String)
がString
に与えられたかのように が正確に解釈されることを示していInteger.parseInt(String)
ます。ただし、オブジェクトをvalueOf(String)
返しますが、プリミティブを返します。new
Integer()
parseInt(String)
int
の潜在的なキャッシングの利点を享受したい場合はInteger.valueOf(int)
、この目障りなものを使用することもできます。
Integer k = Integer.valueOf(Integer.parseInt("123"))
ここで、プリミティブではなくオブジェクトが必要な場合は、新しいオブジェクトを作成するよりも使用するvalueOf(String)
方が魅力的かもしれませparseInt(String)
ん。Integer
Long
Double
このフォーラムから:
parseInt()
プリミティブ整数型(int)をvalueOf
返し ます。これにより、整数を表すオブジェクトであるjava.lang.Integerが返されます。プリミティブ型ではなく、整数オブジェクトが必要になる場合があります。もちろん、もう1つの明らかな違いは、intValueがインスタンスメソッドであり、 parseIntが静的メソッドであることです。
Integer.valueOf(s)
と類似しています
new Integer(Integer.parseInt(s))
違いは、をvalueOf()
返し、(プリミティブ型)を返します。また、キャッシュされたインスタンスを返す可能性があることにも注意してください。これにより、テストの結果が断続的に正しいように見える場合に、混乱を招く結果が生じる可能性があります。オートボクシングの前は利便性に違いがあるかもしれませんが、Java1.5以降はそれほど重要ではありません。Integer
parseInt()
int
valueOf()
Integer
==
さらに、Integer.parseInt(s)
プリミティブデータ型も使用できます。
Java ソースを見てください:valueOf
を使用していparseInt
ます:
/**
* Parses the specified string as a signed decimal integer value.
*
* @param string
* the string representation of an integer value.
* @return an {@code Integer} instance containing the integer value
* represented by {@code string}.
* @throws NumberFormatException
* if {@code string} cannot be parsed as an integer value.
* @see #parseInt(String)
*/
public static Integer valueOf(String string) throws NumberFormatException {
return valueOf(parseInt(string));
}
parseInt
返品int
(不可Integer
)
/**
* Parses the specified string as a signed decimal integer value. The ASCII
* character \u002d ('-') is recognized as the minus sign.
*
* @param string
* the string representation of an integer value.
* @return the primitive integer value represented by {@code string}.
* @throws NumberFormatException
* if {@code string} cannot be parsed as an integer value.
*/
public static int parseInt(String string) throws NumberFormatException {
return parseInt(string, 10);
}
Integer.parseInt は int をネイティブ型として返すことができます。
Integer.valueOf は、その整数がたまたま事前に割り当てられたものの 1 つでない限り、実際に Integer オブジェクトを割り当てる必要がある場合があります。これはより多くの費用がかかります。
ネイティブ型だけが必要な場合は、parseInt を使用してください。オブジェクトが必要な場合は、valueOf を使用します。
また、この潜在的な割り当てのために、オートボクシングは実際にはあらゆる点で良いことではありません。それは物事を遅くすることができます。
parse *バリエーションはプリミティブ型を返し、valueOfバージョンはObjectsを返します。valueOfバージョンは、同じ内部値を持つ別のインスタンスだけでなく、特定の値の同じオブジェクトを返すために内部参照プールも使用すると思います。
jdk1.5+を使用している可能性があり、intに自動変換されているためです。したがって、コードでは、最初に整数を返し、次にintに自動変換されます。
あなたのコードは
int abc = new Integer(123);
Integer クラスを確認すると、parseInt メソッドの呼び出しの値が見つかります。大きな違いは、 valueof API を呼び出すときのキャッシュです。値が -128 ~ 127 の場合はキャッシュされます。詳細については、以下のリンクを参照してください。
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html
public static Integer valueOf(String s)
結果は、文字列で指定された整数値を表す Integer オブジェクトです。
つまり、このメソッドは次の値に等しい Integer オブジェクトを返します: new Integer(Integer.parseInt(s))
必要に応じて、いずれかを使用する必要があります。オブジェクトをインスタンス化するための ValueOf の場合。一部のテキストの値のみが必要な場合は、より多くのリソースを消費します。その場合は、parseInt、parseFloat などを使用する必要があります。