なぜ私はintに、最終的な長いを割り当てることはできませんか?

ゲオルギVelev:

私の知る限り理解し、変数の評価は実行時に行われます。しかし、型評価は、Javaのコンパイル時に行われます。

また、私は(私はローカル変数を使用していますが、それは上記のコンセプトについては何も変化しない)変数の定数を作る、見るように、コンパイル時に知られて、その値を行います。

私はあなたにこの概念をテストするための2つの例を提供します。最初は働いていると第二ではありません。

私は長い間にint型の変数を割り当てることができないのに対し、可変定を行うことは、私はint型の変数に短い変数を割り当てることができますなぜ誰かが私に説明できますか?

// Working example
final int x = 10;
short y = x;

// Non-working example
final long a = 10L;
int b = a;
アンディ・ターナー:

言語仕様の関連部分はあるJLS 5.2、割り当てコンテキスト

また、発現は、型バイト、ショート、チャー、またはINTの一定の式(15.28)である場合:

  • 変数が型バイト、短い、またはcharのものであり、定数式の値が、変数の型で表現可能であれば狭くプリミティブ変換を使用することができます。

作るax変数は、final(彼らはあまりにも一定の値で初期化しているため)その定数式ます。

ので、最初の例では、作品xの定数であるintあなたがに割り当てるしようとしていることをshort、変数、および値が表現可能ですshortので、2番目の例ではないx定数でありlong、そしてあなたがそれを割り当てるしようとしているint変数(値が表現可能であるが、それはすでに暗黙の縮小変換から失格とされているので、これは問題ではありません)。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=126650&siteId=1