2016-11-16 55 views
-1

在Java中,您必須指定變量必須是哪種類型。Java如何檢查分配的值是否正確(關於類型)?

然後確保不能爲變量分配不同類型的值。 嘗試分配不同的值會導致錯誤:例如,「字符串不能轉換爲int。」。

檢查工作如何?

哪裏有關於變量類型的信息存儲?

在像JavaScript這樣的弱類型語言中,將字符串分配給當前編號將不會導致錯誤

它是如何工作的?

據我所知,確定類型值的方式存儲在內存中? 因此:一個變量如何在弱類型語言中改變它?存儲的方式不再匹配。

+0

也許谷歌更多? https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html – TungstenX

+0

@Kayaman:變量*和*對象都不能在Java中改變它的類型 - 但這些是獨立的東西。 –

+0

@JonSkeet事實上,這有點糟糕。 – Kayaman

回答

1

Java經歷了一個編譯過程。在此過程中,編譯器驗證變量的類型是否一致。 JavaScript不是一種編譯語言。沒有運行前流程來驗證變量的類型。更重要的是,JavaScript是一種動態類型語言,因此通過設計,您不必擔心變量的類型。 您可以在這裏閱讀更多關於它的信息: Dynamic type languages versus static type languages

1

有兩個方面 - 編譯時和運行時檢查。

編譯代碼時,可以檢查是否有明顯不正確的賦值。編譯器可以訪問源和所有關於你爲每個變量聲明的類型的信息,所以這很簡單。

還有其他一些需要在運行時檢查的情況,例如當您嘗試將變量轉換爲其他類型時。基本上,Java運行時存儲一些標題/元數據以及每個對象,其中包括有關它的類的信息。這個元數據的具體內容和結構可以在不同版本的Java之間有所不同。但是在任何情況下,都可以檢查這些信息,如果您試圖創建的強制類型無效,則會拋出ClassCastException。

1

Java是一種嚴格類型的語言,我們需要確定變量的類型,它可以是int,float或引用類型(如Object,String,其他類),這樣可以使實現簡單易懂。然而,Java提供了類型轉換的概念,因爲我們可以將一個變量轉換爲另一個符合條件的類型,並且還提供了像parseInt()這樣的包裝器。例如

Object o = "Something"; 
String s = (String) o; 

由於其嚴格的類型性質的Java編譯器不允許我們一個值分配給不同類型的變量。

每個Java對象都存儲一個klass命名標誌來引用它的Class級別對象。

相關問題