Javaでは、以下が許可されます。
char c = 'A' + 1;
ここで、cは値「B」を保持します。上記では、最初に式が評価されます。したがって、「A」は65に変換され、式全体は66に評価され、66は値をcharに格納しているため「66」に変換されます。
ただし、次の場合、コンパイル時エラーが発生します。
char c = 'A';
c = c + 1;
Java式を異なる方法で表示する方法の説明は何ですか?ところで、以下も正常に機能します。
char c = 'A';
c++;
charからintへの変換は、拡大変換と呼ばれます。拡大変換では、値は、intからcharへの変換が縮小変換と呼ばれる数値の全体的な大きさに関する情報を失いません。変換を絞り込むと、数値の全体的な大きさに関する情報が失われる可能性があり、精度も失われる可能性があります。
プリミティブ変換の詳細については、 this ドキュメントを参照してください。
これは、コンパイラが('A' + 1)
はcharの境界内にありますが、(一般的に)c + <an integer>
は範囲内です。
その理由は、整数、またはbyte、shortおよびcharとしてのintより小さいリテラルはintであるためです。このようにして次のことを理解してください。
コード:
byte a = 10;//compile fine
byte b= 11;//compile fine
byte c = a+b;//compiler error[says that result of **a+b** is **int**]
「除算」、「乗算」、その他の算術演算と同様に、数学演算でも同じことが起こります。結果をキャストして、目的のデータ型のリテラルを取得します
byte c = (byte)(a+b);
あなたが実行するとき
c= c+1;//compiler error
C + 1の結果はintであり、charではありません。そのため、コンパイラは同じものに対してコンパイル時エラーを出します。そのため、リテラルをcharデータ型に変更するには、プリミティブキャストを提供する必要があります。この例が理解を深めることを願っています。