Kathy Sierra による SCJP ガイドの本では、課題の章で、このようなものを宣言できることを学びbyte b = 7;
ます。舞台裏のコードはbyte b = (byte) 7;
. これは、Java では、数値 7 がリテラル int 値と見なされるため、int にキャストする必要があるためです。
今他の状況。double は、より大きなデータ型であるため、float 値に含まれるすべてのバイトを含めることができます。10.543float f = 10.543;
は非常に小さな値であり、フロート内に収まるはずです。また、そのような数値のリテラル値は Double と見なされるため、コンパイラは暗黙的に float にキャストする必要があります。しかし、そうではありません。コンパイラが私たちを止めます。その値の後にF
orを追加する必要があります。f
リテラル値の割り当てで、これら 2 つの競合する動作が存在するのはなぜですか? 要するに、byte b = 7
可能であれば。なぜfloat f = 10.543
できないのですか?