我们为什么不用s
这样的短数据类型写short s = 2s;
,因为我们使用float float f = 1.23f
编写?
我知道默认情况下编写float
时编译器将其视为double
并为其分配8个临时字节,并在尝试将该8字节复制到float
时4导致类型错误,这就是我们在初始化f
后编写float
的原因,但为什么我们不会使用short
执行与默认int
类似的操作是一个文字类型?
答案 0 :(得分:5)
Java语言规范允许类型后缀L
或l
用于长文字。但是,它不为短值提供类型后缀。这不是必要的,因为:
int
表示。如果变量的类型是byte,short或char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示。
答案 1 :(得分:1)
这是因为从double到float会截断值并丢失数据,因此编译器不会自动执行此操作,您必须明确告诉它。但是当从较小的大小,较短的大小到较大的大小int时,它会自动完成,因为编译器只需填充数据并且没有潜在的数据丢失,与前一种情况相反。
答案 2 :(得分:0)
为什么我们不为短类型添加“s”后缀?
因为Java语言在这一点上不一致。
对于浮动数字基元类型,JLS对于没有浮动数字基元类型更灵活:
另外,如果表达式是常量表达式(第15.28节) 输入byte,short,char或int :
如果类型为,则可以使用缩小的基元转换 变量是byte,short或char,以及常量的值 表达式可以在变量的类型中表示。
我认为在声明和操纵它们的方式上区分byte, short, char, or int
和float and double
并不是真的需要。它会造成不一致以及使用它们时可能出现的错误。
如果short s = 10;
有效,因为编译器验证缩小的原语转换没有丢失信息,因此float f = 10.0;
也会因完全相同的原因而有效。