2017-06-16 49 views
6

为什么我们不写s这样的短数据类型,比如short s = 2s;,因为我们用float来写float f = 1.23f为什么我们不为短类型添加“s”后缀?

我知道当我们写float默认情况下,编译器将其视为double和分配8个临时字节给它,当它试图复制8字节float的4,结果在一个类型的错误,所以这是为什么我们在初始化一个float后编写f,但为什么我们不按照默认的字面类型做类似short

回答

1

这是因为从double到float会截断值并丢失数据,所以编译器不会自动执行该操作,您必须明确地告诉它。但是,当从较小的尺寸,较短的尺寸,到较大的尺寸int时,它会自动完成,因为编译器只需填充数据并且没有潜在的数据丢失,而不是前一种情况。

+1

我们也来自int默认情况下默认情况下int literal是我认为的标准 – PVP

+0

但是,一个短变量可以分配给int文本。例如,“short s = 32767”。这从一种较大的尺寸变为一种较小的尺寸。编译器似乎正在查看右侧int的实际值,因为不接受“short t = 32768”。 –

+0

@AndyThomas啊,没有看到它的应用程序。 –

4

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

  • 任何可以用短整型表示的值也可以用默认整型int表示。
  • 如果constant expression,则允许将短整型值赋值给短整型变量,其值可以用短整型表示。看到Java Language Specification, "Assignment Contexts":如果变量的类型是字节,短,或炭和常量表达式的值在变量的类型表示的,可以使用

甲基本收缩转换。

+0

Thomus先生然后还可以由浮点数表示的任何值也可以由默认类型double?表示。 – PVP

+2

@PVP请参阅https://stackoverflow.com/a/14103012/3788176 –

0

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

因为Java语言在这一点上是不一致的。

JLS的是没有浮动数字原始类型更加灵活,因为浮动数字基本类型:

此外,如果表达式是 类型字节的恒定表达(§15.28) ,short,char或int

如果变量 的类型是byte,short或char,并且常量012的值可能会使用缩小基元转换表达式可以表示变量的类型。

我认为在这样做byte, short, char, or intfloat and double区分声明和操纵它们是不是真的需要。它会在使用它们时造成不一致和潜在的错误。

如果short s = 10;是有效的,因为窄化原语转换由编译器确认它没有丢失信息,所以float f = 10.0;也会因为完全相同的原因而有效。

相关问题