2014-05-06 24 views
0

我正在準備Java OCA考試。JAVA SE7關於顯式鑄造的問題

這裏是關於鑄造的問題。 我明白,對於原始數據類型,如果我們試圖將一個int賦給long,我們應該沒問題。因爲它可以自動完成。

而且如果我們試圖給一個int分配一個long。它會導致編譯器錯誤,對嗎?

所以,第一個問題: 需要明確的鑄造和我沒有做,在我的代碼時,該代碼將無法編譯。有沒有任何情況下,代碼將編譯?

而且第二個問題: 這本書,我實際閱讀有一個開關箱體結構,如: INT NUM = 10 開關(NUM) 情況10/3://做一些事情..

和作者說,在這種情況下,小數結果將被切成3 .... 但是,有在這裏沒有明確的鑄造,我認爲這應該是一個編譯錯誤......

+1

用整數除整數將始終導致java中的整數。換句話說:10/3 = 3而10/3.d = 3.33 – Kicsi

+0

雖然它是相同的符號,但「/」可以表示不同的操作,具體取決於操作數。如果至少有一個操作數是double或float類型的,那麼大家都知道它是標準分區。如果兩個操作數都是int類型的,那麼它是一個整數部分。 – schmop

回答

1

至於第一個問題:如果需要顯式轉換,代碼將不會編譯。這就是「需要」的意思。

至於第二個問題,試試這個:

double x = 10/3; 

x將等於3了。這不是投射,它是/運營商的標準行爲。

+1

值得注意的是'10/3'返回一個'int',並且賦值給'double'是一個隱式的upcast。 –

+0

哦,我明白了......操作/將在10/3的情況下返回一個int。 ,如果它:10.0/3,結果將是十進制正弦,這裏有一個浮點數,結果應該跟隨浮點數,對吧? –

1

第一個問題 - 通常任何導致數據/準確性丟失的類型轉換必須明確進行。

例如:

int y = 3; 
double x = y;     // ok 

結果存儲在x中的值3.0和是完全合法的。但是:

double x = 3.0; 
int y = x;    // give a compile error 

int y = (int) x;   // must explicit cast 

第二個問題 - 認爲運營商的功能,以便劃分功能(<T> first, <T> second) 因此基於這兩種類型的傳遞給它的除法運算符改變其行爲。 所以10/3等於整數,因爲它是兩個整數和 10.0/3的divison等於3.3333333,因爲它無法轉換雙爲int(沒有明確地被告知這樣做的),因此將其轉換int(3)爲double並在double上執行計算並返回double。

因此,運算符的返回類型取決於它的參數,並且如果可能的話,自動類型轉換將始終向上(更精確)。

+0

這意味着在我原來的問題,如果它是: 情況10.0/3://做點什麼, 代碼將不會編譯,對不對? –

+1

正確。 10.0/3將返回一個雙精度型,雙精度型不能用於開關情況。然而(詮釋)10.0/3將工作得很好(雖然可能不是預期的) – CJDood