2013-06-22 295 views
0

我來自C++,只知道一些Java,但有一點我不完全瞭解java是鑄造。在C++中,我們有Regular cast vs. static_cast vs. dynamic_cast。在java中,我們在原始類型和對象類型(稱爲裝箱和拆箱)之間進行投射,在原始類型之間進行投射,使用Class函數進行投射,有時我們執行未檢查的投射。是否有從Java的投射系統到C++的投射系統的直接映射?他們是否等同?或者在某一方面有獨特的東西嗎?Java的鑄造和C++的鑄造

+1

什麼是「常規演員」? –

+1

@KerrekSB:我提供的鏈接解釋了它。 – keelar

+1

我不會考慮裝箱,因爲它會創建新的實例。這只是一個編譯器的便利,可以用來完成「新的Integer(myInt)」等等。 – SJuan76

回答

1

如果您瞭解C++,則可以相當容易地解釋Java對象模型。類類型的Java變量是引用以動態創建相應類型的對象。一個初始化的Java變量T x = new T();緊密對應於一個C++指針:T * px = new T;

在Java中,所有類類型的多態型Object繼承,因此,所有的指針可用於RTTI:Java類類型的變量的所有類型轉換是什麼dynamic_cast是用C++編寫的。因此Java的(S) x對應於C++中的dynamic_cast<S *>(px),具有相同的失敗模式,即空結果表示動態類型不相關。

所有其他C++指針轉換都是不安全的,並且在Java中沒有等價物。我不知道Java是否具有整數到浮點的標量轉換;如果是這樣,那麼這些將與C++轉換密切對應。

拳擊和原始類型是一個相當獨立和不相關的問題。如果你想在C++中使用類似的東西,你會得到某種類型的template <typename T> struct Box,並將其轉換爲­。

1

簡而言之:

想想從鑄件內置類型爲的static_cast的和

想想對象之間的強制類型轉換爲dynamic_cast的在C++。