2012-05-14 24 views
48

StringDoubleデータ型に変換したいとします。 parseDoubleまたはvalueOfを使用する必要があるかどうかわかりません。Double.parseDouble(String)とDouble.valueOf(String)の違いは何ですか?

これら2つの方法の違いは何ですか?

+0

[Double.valueOf(s)対Double.parseDouble]の可能な複製(http://stackoverflow.com/questions/7255078/double-valueofs-vs-double-parsedouble) –

+2

このリンクは閉じているため私の答えの複製: – breceivemail

答えて

59

parseDoubleは、文字列のプリミティブなdouble含む値を返します。DoubleクラスのvalueOfメソッドを実行した場合と同様に

は、指定されたStringが表す値に初期化された新しいdoubleを返します。

valueOfは、Doubleインスタンスを返します。すでにキャッシュされている場合、同じキャッシュされたインスタンスが取得されます。

指定されたdouble値を表すDoubleインスタンスを返します。 新しいDoubleインスタンスが必要ない場合は、このメソッドは一般的に コンストラクタDouble(double)よりも優先される必要があります。 は、頻繁に要求される値をキャッシュすることによって大幅に改善されます。

新しいDoubleオブジェクトのインスタンスを作成するオーバーヘッドを回避するために、あなたは通常、あなたは、ダブルデータ型に文字列を変換したい場合は、最もparseDouble()メソッドを選択しvalueOf

+2

+1の 'valueOf()'のファミリーはこの理由から好まれています... –

+5

あなたは私がparseDouble()が好まれると言いました。なぜvalueOf()ですか? – breceivemail

+2

編集は私のものではなく、無効です。私はそれをロールバックします。 – MByD

0

のドキュメントparseDouble()のドキュメントでは、「DoubleクラスのvalueOfメソッドで実行されるように、指定されたStringで表される値に初期化された新しいdoubleを返します。

0

を使用する必要があります。

String str = "123.67"; 
double d = parseDouble(str); 

あなたは、二重の値を取得します: コード例を参照してください。 StringToDoubleチュートリアルtutorialDataを参照してください。

+2

そして、valueOf()メソッドはどうですか? – breceivemail

+0

引数文字列sで表されるdouble値を保持するDoubleオブジェクトを返します。 – Rajshri

28

Double.parseDouble(String)は、プリミティブdoubleタイプを返します。 Double.valueOf(String)は、タイプDoubleのラッパーオブジェクトを返します。

したがって、例えばため.:

double d = Double.parseDouble("1"); 

Double d = Double.valueOf("1"); 

はまた、valueOf(...)はオーバーロードされたメソッドです。parseDouble一方

  1. Double valueOf(String s)
  2. Double valueOf(double d)

は、次のシグネチャを持つ単一の方法である:これは、2つの変異体を有する

  1. double parseDouble(String s)
1

TどちらもStringをdouble値に変換しますが、parseDouble()メソッドがプリミティブdouble値を返す場合、valueOf()メソッドはプリミティブdoubleをプリミティブdouble値を含むDoubleラッパークラスオブジェクトにさらに変換します。

Stringの値がプリミティブdoubleに変換できない場合、Stringからプリミティブdoubleへの変換でNFE(NumberFormatException)がスローされることがあります。

1

parseDouble()メソッドは(すべきは、いくつかの数値を含む)の文字列を初期化するために使用されている....それは戻り値がintのように、プリミティブデータ型である、フロート等

しかしのvalueOf( )は、Wrapperクラスのオブジェクトを作成します。ダブル値を得るには、それをアンラップしなければなりません。それはチョコレートと比較することができます。製造業者は、汚染を防ぐためにチョコレートを何らかの箔または紙で包みます。ユーザーはチョコレートを取り出し、ラッパーを取り出して投げ、それを食べる。

以下の変換を確認してください。

int k = 100; Integer it1 = new Integer(k);

intデータ型kは整数クラスを使用してオブジェクト、IT1に変換されます。 it1オブジェクトは、kがオブジェクトである必要がある場合はいつでもJavaプログラミングで使用できます。

次のコードを使用して、オブジェクトit1をアンラップ(Integerオブジェクトからintを戻す)することができます。

int m = it1.intValue(); 

System.out.println(m * m); // prints 10000

// intValue()は、intデータ型を返すIntegerクラスのメソッドです。

関連する問題