2011-12-25 12 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

只是作爲一個有點挑剔挑剔這裏,但你的變量名的命名應該是一致的。如果你打算使用駱駝外殼作爲變量名稱,那麼可以通過它。混合搭配是一個糟糕的主意。此外,將「helpermethod」這個詞添加到變量名中可能會導致以後出現混淆。 – 2011-12-25 22:24:12

回答

3

double是一種原始的類型,而Double是一個普通的Java類。您無法調用原始類型的方法。該intValue()方法然而在Double可用的,如圖所示javadoc

這些原始類型的一些更多的閱讀可以發現here

+0

好的 - 我得到了這個 - 那麼我如何才能使頂級代碼段工作?我試過這個 - System.out.println(「double value is:」+ doubleObj.intValue());但這也行不通 – 2011-12-25 23:40:24

+0

改變分配到'Double doubleObj = new Double(doublehelpermethod);' – Robin 2011-12-26 09:42:35

+0

驚人的我不敢相信我錯過了首都!但是,感謝羅賓爲了解釋爲什麼 - 真的很有啓發性。 – 2011-12-28 10:23:29

1

你在上面片斷,試圖Double對象賦給一個基本類型是這樣的。

double doubleObj=new Double(doublehelpermethod); 

這將因爲拆箱當然工作(包裝類型轉換爲它的等效基本類型),但遇到被提領doublehelpermethod什麼問題。

doublehelpermethod.intValue() 

是不可能的,因爲doublehelpermethod是基本類型變量,不能使用點.見相關... AutoBoxing