2016-11-16 4 views
-1

Javaでは、変数の型を指定する必要があります。Javaは、(タイプに関して)割り当てられた値が正しいかどうかをどのようにチェックするのですか?

次に、変数に異なる型の値を割り当てることができないことを確認します。 異なる値を割り当てようとすると、「文字列をint。に変換できません」というエラーが発生します。

チェックはどのように機能しますか?

変数型に関する情報はどこに保存されていますか?

JavaScriptのような弱く型付けされた言語では、現在の数値に文字列を割り当てると、となり、エラーになります。

どのように動作しますか?

私が知っている限り、値がメモリに保存される方法を決定しますか? 結果:どのように変数を弱い型の言語で変更できますか?ストレージの方法はもはや一致しませんでした。

+0

多分もっとGoogleに? 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

コンパイル時と実行時のチェックの2つの側面があります。

コードがコンパイルされると、明らかに間違った割り当てがあるかどうかを確認できます。コンパイラは、各変数に対して宣言した型に関するソースとすべての情報にアクセスできるため、これはかなり簡単です。

変数を別の型にキャストしようとするときなど、実行時にチェックする必要がある場合があります。基本的に、Javaランタイムは、各オブジェクトとともに、そのクラスに関する情報を含むいくつかのヘッダ/メタデータを格納します。このメタデータの具体的な内容と構造は、Javaのバージョンによって異なる場合があります。しかし、どのような場合でも、この情報をチェックすることができます。キャストしようとしているキャストが無効な場合は、ClassCastExceptionがスローされます。

1

Javaは厳密に型指定された言語であり、変数の型を決定する必要があります.int、float、または参照型(Object、String、その他のクラスなど)でも構いません。しかし、Javaでは、変数を別の適格な型に変換できる型キャストの概念があり、parseInt()のようにラッパーも存在します。例えば

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

厳密な型の性質のため、Javaコンパイラは異なる型の変数に値を割り当てることはできません。

すべてのJavaオブジェクトには、クラスレベルのオブジェクトを参照するために、klassという名前のフラグが格納されています。

関連する問題