以下の変数 (b と呼ばれる) は、等号の右側にある唯一のものである場合、式と呼ぶことができますか?
// This code fragment will not compile.
// c is a char, and b is a byte.
c = b;
この質問をする理由は、式内の型昇格のトピックのためです。Java がすべてのバイトを int にプロモートすることを理解しています。それが、このコード フラグメントがコンパイルされない唯一の理由ですか? (私はキャストについて知っていることに注意してください。それはこのスレッドのポイントではありません。どうもありがとう。)
編集: ジョンとピーターに感謝します。2 番目の例を使用してこのトピックを見てみましょう。
byte b = 1;
short s = 2;
s = b; // OK
s = b*2; // Not OK (compilation error)
次のようなことが起こっているというのは本当ですか?
(3 行目) Java はバイトを short に変換します。(4 行目) Java は式 b*2 を int に変換します。
これが正しければ、=b; のように見えます。および =b*2; Javaが異なる方法で処理する「式」です。したがって、 =b; 「expression」は int に変換されず、short に拡張されます。しかし、 =b*2; s というターゲット変数が short であっても、expression は short ではなく int に変換されます。
編集2: また -
short s1, s2 = 2, s3 = 2;
s1 = s2*s3; // Not OK (compilation error)
3 つの変数はすべて short ですが、s2*s3; 式は int に昇格されるため、コンパイル エラーが発生します。