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