为什么我们不为短类型添加“s”后缀?

时间:2017-06-16 20:50:18

标签: java

我们为什么不用s这样的短数据类型写short s = 2s;,因为我们使用float float f = 1.23f编写?

我知道默认情况下编写float时编译器将其视为double并为其分配8个临时字节,并在尝试将该8字节复制到float时4导致类型错误,这就是我们在初始化f后编写float的原因,但为什么我们不会使用short执行与默认int类似的操作是一个文字类型?

3 个答案:

答案 0 :(得分:5)

Java语言规范允许类型后缀Ll用于长文字。但是,它不为短值提供类型后缀。这不是必要的,因为:

  

如果变量的类型是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 intfloat and double并不是真的需要。它会造成不一致以及使用它们时可能出现的错误。

如果short s = 10;有效,因为编译器验证缩小的原语转换没有丢失信息,因此float f = 10.0;也会因完全相同的原因而有效。