2011-12-25 11 views
0

問題が発生して困っています。なぜそれが動作しないのか理解できません。変数をdouble objに渡してintに変換するにはどうすればよいですか?
なぜトップコードスニペットでは機能しませんが、その下のコードスニペットでは機能しますか?Object.intValue()で奇妙な動作が発生する

唯一の違いは余分な変数を追加しているようですが、それはdoubleとタイプされていますか?

//Converting double to int using helper 

//This doesn't work- gets error message 
//Cannot invoke intValue() on the primitive type double 

double doublehelpermethod = 123.65; 
double doubleObj = new Double(doublehelpermethod); 
System.out.println("The double value is: "+ doublehelpermethod.intValue()); 
//-------------------------------------------------------------------------- 
//but this works! Why? 

Double d = new Double(123.65); 
System.out.println("The double object is: "+ doubleObj); 
+1

hereを見つけることができ、Doubleでしかし使用可能です。あなたが変数名のためにラクダのケーシングを使用するつもりならば、それを通り抜けます。ミックスしてマッチさせるのは悪い考えです。また、変数名に "helpermethod"という単語を追加すると、後で混乱する可能性があります。 –

答えて

3

ことはできませんdoubleDoubleは、通常のJavaクラスである一方で、プリミティブ型であります。プリミティブ型のメソッドを呼び出すことはできません。 javadoc

に示すようintValue()方法は、これらのプリミティブ型のいくつかのより多くの読み取りがちょうどここにビットNITうるさいことが、あなたの変数名の命名法は一貫している必要があり

+0

ok-わかりました。どのようにしてトップスニペットコードが機能するのですか?私はこれを試しました - System.out.println( "double値は:" + doubleObj.intValue());しかしそれもうまくいきません –

+0

「double doubleObj = new double(doublehelpermethod);」 – Robin

+0

に代入を変更する私は首都で逃したと信じられません!しかし、Robinにはすばらしい説明がありますが、本当に啓発してくれてありがとう。 –

1

次のようなプリミティブ型にDoubleオブジェクトを代入しようと、一番上のスニペットにいます。なぜならアンボクシングのコースワークのでしょう

double doubleObj=new Double(doublehelpermethod); 

が、何の問題、あなたがdoublehelpermethodを逆参照されて直面している(それにラッパー型を変換するには、同等のプリミティブ型です)。

doublehelpermethod.intValue() 

doublehelpermethodがプリミティブ型変数であるとドット.参照を使用して、関連することができないので... AutoBoxing

関連する問題