Java文字值赋值行为
在凯西·塞拉(Kathy Sierra)的《SCJP指南》(the book of SCJP guide)中,在作业一章中,我们了解到我们可以声明如下byte b = 7;
。幕后的代码是byte b = (byte) 7;
。这是因为在java中,数字7被认为是一个文本int值,所以必须转换为int
现在是另一种情况。Double可以包含浮点值中包含的每个字节,因为它是一个更大的数据类型。所以我们可以说float f = 10.543;
因为10.543是一个很小的值,应该适合浮动。同样,这个数字的文本值被认为是双精度的,所以编译器应该隐式地将其转换为float。但事实并非如此,编译器阻止了我们。我们必须在该值之后附加一个F
或f
为什么这两种相互冲突的行为会出现在文字赋值中?简而言之,如果byte b = 7
是可能的。为什么float f = 10.543
不可能
# 1 楼答案
区别在于:
# 2 楼答案
这是不对的。见其他几份答复中提到的JLS #5.2。它说,“如果变量的类型是byte、short或char,并且常量表达式的值可以在变量的类型中表示,则可以使用缩小原语转换。”
没有关于打字的事
# 3 楼答案
你可以读JLS 5.2 Assignment Conversion
JLS #3.10.2.Floating-Point Literals
5.1.2. Widening Primitive Conversion
我希望以上能澄清你的疑问