494

とどうparseInt()違うのvalueOf()

彼らは私にはまったく同じことをしているように見えます(、、などにも当てはまりparseFloat()ますがparseDouble()parseLong()それらはどのように違うのLong.valueOf(string)ですか?

また、これらのうちどれが好ましく、慣例により頻繁に使用されますか?

4

11 に答える 11

463

そうですね、 の 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)ん。IntegerLongDouble

于 2009-02-03T20:04:33.503 に答える
80

このフォーラムから:

parseInt()プリミティブ整数型(int)をvalueOf返し ます。これにより、整数を表すオブジェクトであるjava.lang.Integerが返されます。プリミティブ型ではなく、整数オブジェクトが必要になる場合があります。

もちろん、もう1つの明らかな違いは、intValueがインスタンスメソッドであり、 parseIntが静的メソッドであることです。

于 2009-02-03T20:01:12.450 に答える
42
Integer.valueOf(s)

と類似しています

new Integer(Integer.parseInt(s))

違いは、をvalueOf()返し、(プリミティブ型)を返します。また、キャッシュされたインスタンスを返す可能性があることにも注意してください。これにより、テストの結果が断続的に正しいように見える場合に、混乱を招く結果が生じる可能性があります。オートボクシングの前は利便性に違いがあるかもしれませんが、Java1.5以降はそれほど重要ではありません。IntegerparseInt()intvalueOf()Integer==

さらに、Integer.parseInt(s)プリミティブデータ型も使用できます。

于 2009-02-03T20:01:45.350 に答える
20

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);
}
于 2014-10-28T08:53:29.387 に答える
6

Integer.parseInt は int をネイティブ型として返すことができます。

Integer.valueOf は、その整数がたまたま事前に割り当てられたものの 1 つでない限り、実際に Integer オブジェクトを割り当てる必要がある場合があります。これはより多くの費用がかかります。

ネイティブ型だけが必要な場合は、parseInt を使用してください。オブジェクトが必要な場合は、valueOf を使用します。

また、この潜在的な割り当てのために、オートボクシングは実際にはあらゆる点で良いことではありません。それは物事を遅くすることができます。

于 2009-02-03T20:28:28.727 に答える
1

parse *バリエーションはプリミティブ型を返し、valueOfバージョンはObjectsを返します。valueOfバージョンは、同じ内部値を持つ別のインスタンスだけでなく、特定の値の同じオブジェクトを返すために内部参照プールも使用すると思います。

于 2009-02-03T20:02:37.780 に答える
0

jdk1.5+を使用している可能性があり、intに自動変換されているためです。したがって、コードでは、最初に整数を返し、次にintに自動変換されます。

あなたのコードは

int abc = new Integer(123);
于 2010-12-16T09:05:23.073 に答える
0

Integer クラスを確認すると、parseInt メソッドの呼び出しの値が見つかります。大きな違いは、 valueof API を呼び出すときのキャッシュです。値が -128 ~ 127 の場合はキャッシュされます。詳細については、以下のリンクを参照してください。

http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

于 2014-07-23T17:58:28.300 に答える
0

public static Integer valueOf(String s)

  1. 引数は、あたかも引数が parseInt(java.lang.String) メソッドに与えられたかのように、符号付き 10 進整数を表すものとして解釈されます。
  2. 結果は、文字列で指定された整数値を表す Integer オブジェクトです。

  3. つまり、このメソッドは次の値に等しい Integer オブジェクトを返します: new Integer(Integer.parseInt(s))

于 2015-09-29T03:31:14.670 に答える
-2
  1. ValueOf の場合 -> Integer オブジェクトを作成しています。プリミティブ型でも静的メソッドでもありません。
  2. ParseInt.ParseFloat の場合 -> それぞれのプリミティブ型を返します。静的メソッドです。

必要に応じて、いずれかを使用する必要があります。オブジェクトをインスタンス化するための ValueOf の場合。一部のテキストの値のみが必要な場合は、より多くのリソースを消費します。その場合は、parseInt、parseFloat などを使用する必要があります。

于 2009-08-26T07:08:04.440 に答える