3

Java での int から long への変換について質問があります。フロートの場合は問題がないのはなぜですか:

float f = (float)45.45;//compiles no issue.
float f = 45.45f; //compiles no issue.

ただし、長いタイプの場合、問題があるようです:

    long l = (long)12213213213;
    //with L or l at the end it will work though. 
    long l = (long)12213213213L;

コンパイラが範囲外の問題によるエラーを通知すると、プログラマが計画した可能性のあるキャストをチェックせずにブロックするようです。

それについてどう思いますか?なぜそのような特定の理由があるのですか?

前もって感謝します。

4

2 に答える 2

7

ただし、長いタイプの場合、問題があるようです:

それは、 12213213213withoutLは でありint、 ではないためlongです。その値は の範囲外であるintため、エラーが発生します。

次のようなものを試してください:-

System.out.println(Integer.MAX_VALUE);
System.out.println(12213213213L);

あなたはよりよく理解するでしょう。

の場合floatに関する限り: -

float f = (float)45.45;

45.45double値であり、 のサイズに適合しますdouble。したがって、コンパイラはそれで問題はなく、 to を実行castfloatます。

コンパイラが範囲外の問題によるエラーを通知すると、プログラマが計画した可能性のあるキャストをチェックせずにブロックするようです。

丁度。コンパイラは最初に有効な値を最初にチェックし、int次にキャスト操作でさらに移動できます。

したがって、基本的にlongandの場合int: -

long l = (long)12213213213;

として表現できないcastためではなく、操作が原因でエラーが発生していません。そのため、コンパイラはキャスト操作を実行するために有効な値を取得できませんでした。numeric literalint

于 2013-01-31T18:46:45.947 に答える
4

Javaは、値を使用して何をするかを考慮せず、それが何であるかだけを考慮します。たとえば、長すぎる値が大きすぎる場合、それをdoubleに割り当てても問題ありません。最初に、long値が有効であるとチェックされます。

于 2013-01-31T18:57:38.823 に答える